- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在查看随机的 TopCoder 问题,以便在比赛中尝试和改进,我今天遇到了一个问题,我希望得到一些意见。
问题陈述
Teddy 喜欢玫瑰,Tracy 喜欢百合。他们希望把这些花种在一个大花园里。
然而,镇上唯一的花店以 vector<int>
代表的小包形式出售这些花。玫瑰和百合。第 i 个数据包包含 roses[i] 玫瑰和 lilies[i] 百合。每包只能购买一次。
Teddy 和 Tracy 想买一些花,把它们摆成一个长方形的格子。这个网格的排列必须使每个单元格只包含一朵花,并且共享一条边的任何两个单元格必须包含不同种类的花。此外,Teddy 和 Tracy 必须使用他们购买的所有鲜花。
Teddy 和 Tracy 喜欢方形网格,所以他们想买一套包装,这样他们就可以将花朵排列成尽可能方形的网格。更准确地说,他们希望将花朵排列成 R x C 网格,其中 R 和 C 是正整数,这样 |R-C| (|R-C|表示R-C的绝对值)被最小化。返回此最小绝对值,如果不存在有效排列,则返回 -1。
定义
类别:BuyingFlowers
方法:buy
参数:vector <int>, vector <int>
返回:int
方法签名:int buy(vector <int> roses, vector <int> lilies)
示例
{2, 4}
{4, 2}
返回:1
买下所有包裹得到 6 朵玫瑰和 6 朵百合,他们可以按照以下排列创建一个 3 x 4 的网格:
RLRL
LRLR
RLRL
这种排列的高宽差为1。
到目前为止我的想法
到目前为止,我对这个问题有一些想法,我认为这些想法可能对解决它很重要。请随意忽略它们。
由花朵创建的每个矩形的周边都会有偶数个玫瑰和百合花。所以你可以用花做的最大可能的矩形可以通过取两个数量中较小的一个来找到,比如你有 6 朵玫瑰和 4 朵百合,因为你只有 4 朵百合,你可以做的最大尺寸的矩形将包括 4玫瑰和 4 朵百合花。
当您考虑到矩形的每个单元格都必须用一朵花填充时,挑战显然就来了,因此您必须找到“最适合”的矩形,给定您拥有的花的数量,以满足两者:为其余的花朵提供足够的“中间”单元格,并尽可能靠近正方形。
我看过一些已发布的解决方案,但是代码往往非常困惑和优化(就快速编写而言),因此往往很难提取作者为解决方案考虑的概念.
如果有任何想法,我将不胜感激,我很想了解一些快速解决此类问题的方法。
最佳答案
对于 TopCoder,问题陈述中最重要的部分之一是约束部分,因为这通常规定了在时间限制内什么是可能的,什么不是。
在你的例子中,最多有 16 个数据包。由于可能的子集总数 =2^16=65536 非常少,我们可以查看所有数据包子集并决定哪个产生最佳组合。
为此使用位操作(在 C++ 中)
for(int i=0;i<(1<<16);i++)
{
//i represents a subset
for(int j=0;j<16;j++)
if(i & (1<<j))
{
//j-th packet is present in subset
}
}
给定包的组合后,你能说出你能做出多大的矩形吗?
是的。
提示:当你在左上角固定一朵百合,剩下的花怎么排列?
P.S:只有一种方法。
同样,当你在左上角固定一朵玫瑰时,只有一种方法可以填充矩形。
一旦你选择了这个,只需遍历所有子集的组合,看看哪个产生最小的 |R-C|。
如果您还有其他问题,请询问。
关于java - TopCoder 最佳选择算法来自 SRM 489 DIV 2(500 分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18523189/
我有一个 div(我认为是容器?)我希望它成为中心页面。 Billede 2 我只想让所有上下文都位于页面中心,这怎么可能? 最佳答案 Billede 2 根据您的要求
我只是在研究 jQuery,偶然发现了 Find 函数。 我是这样测试的: $(document).ready(function(){ $('button').click(function()
如何制定一个规则来做这样的事情: .container .unit:first-child(if it has inside div.box1.extra) + .box2 { top: 50px;}
我想了解为什么浏览器显示 和 的方式不同? 这是一个示例:片段 #1 的预期输出是三个并排的框:[黑色]、[蓝色]、[红色]。代码段 #2 仅显示 [black] 和 [red] - 为什么代码段 #
我有一个奇怪的问题,我无法使用正常的嘶嘶声选择器来正确选择 jQuery 中的某些内容: 这两行代码不做同样的事情。 ele.children("div.a > div").addClass("bad
我有一个包含另外两个 div 的 div first div second div 父 div 有最大高度,因此不能增长超过一定数量。但是两个子 div 可以有任何大小(动态
我在两个 div 之间有问题。 div#mainbody 是父 div 有一个背景,div 2 子 div 有自己的背景所以 div 2 浮出父级 div 但我希望它位于父级 div 中。 HTML:
我在另一个具有特定宽度的 div 中有一个 div,但我希望子 div 的宽度与浏览器屏幕大小成百分比而不是与其父 div 的百分比,这意味着当我将子 div 的宽度设置为 50% 时,我希望它的大小
我有以下代码。当单击 div 1 中的按钮时,我需要隐藏 div 1 并显示 div2。 (在 Angular HTML5 中)。我有一个带有 Controller 等的 JS 文件,目前我有两个不同
现在我可以将容器 div 的大小自动调整到内部 div,或者我可以将整个东西居中...但我不知道如何同时进行这两项操作。 下面是我拥有的 CSS/布局。现在 page 和 main 元素都居中,但如果
当一个单元格 div 包含绝对定位的 div 时,如何在表格 div 中顶部对齐两个单元格 div? 在此示例中,不包含绝对定位的 div 的单元格 div 被下推。 HTML: 1
我的程序是一个游戏,从 4 个可玩 Angular 色开始,每个 Angular 色都在自己的类 charContainer 中,这 4 个 div 位于类 character 的容器中。当玩家通过点
我有这样的东西: 现在,#page 中没有任何格式。它适用于一些内容,我的意思是,当内容更大时,#page 也有更高的高度。但是,当今天我在其中应用 #con
我有一个 React 应用程序,并且在一些 CSS 方面遇到了一个稍微大一点的问题。 我有一个 View 分为两部分。但这两个部分位于一个更大的组件中。左侧部分显示一些联系人,右侧我想显示这些联系人的
我想像 facebook 注册页面一样,一个div1(section width:1024px)有四个div,左边div2(width:50%) 有div3(fb slogan),下面div4(con
在我的网页上遇到一个问题,母版页中的页脚对于某个特定页面没有正确显示。在那个页面上,我有一个 在底部。 在我的头上敲了一会儿之后,我发现要让页脚正确显示,我需要做的就是将该行更改为: 我不明白为什么
我正在使用 this plugin用于跨浏览器兼容的灰度图像。基本上,图像最初处于低不透明度的灰度模式。当用户将鼠标悬停在图像上时,灰度逐渐变为彩色,不透明度返回到 1,之前隐藏的 div 从底部向上
这是一个 jsfiddle link of my issue HTML 8.123456 huh-fjiuetie 条件是: h
当前面的 div 中的文本溢出时,如何防止后面的内联 div 换行显示。 如您所见,对于第一个帖子,主要内容换行到第二行,因此它后面的链接显示在新行上(这是不正确的)。 但是对于第 3 篇文章,主标题
我有一个 div,当它悬停在上面时,它会激活另一个 div。当用户将鼠标移动到激活的 div 上时,我希望该 div 保留下来。这是一个片段。 当您将鼠标悬停在金色框上时,紫色框会隐藏并显示灰色框。当
我是一名优秀的程序员,十分优秀!