- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
自 HOURS 以来,我一直在努力思考这个 TopCoder 问题,但无法找到一个完美的解决方案,并找到了下面给出的一个使用得非常漂亮的解决方案!
我想弄清楚这个解决方案如何适用于给定的问题?而我当初怎么会想到呢?阅读解决方案后,我认为它是霍夫曼编码的一种变体,但这是我所能得到的。我真的很着迷,想知道什么样的思路可以导致这个解决方案..
问题来了: http://community.topcoder.com/stat?c=problem_statement&pm=11860&rd=15091
Fox Ciel has lots of homework to do. The homework consists of some mutually independent tasks. Different tasks may take different amounts of time to complete. You are given a int[] workCost. For each i, the i-th task takes workCost[i] seconds to complete. She would like to attend a party and meet her friends, thus she wants to finish all tasks as quickly as possible.
The main problem is that all foxes, including Ciel, really hate doing homework. Each fox is only willing to do one of the tasks. Luckily, Doraemon, a robotic cat from the 22nd century, gave Fox Ciel a split hammer: a magic gadget which can split any fox into two foxes.
You are given an int splitCost. Using the split hammer on a fox is instantaneous. Once a hammer is used on a fox, the fox starts to split. After splitCost seconds she will turn into two foxes -- the original fox and another completely new fox. While a fox is splitting, it is not allowed to use the hammer on her again.
The work on a task cannot be interrupted: once a fox starts working on a task, she must finish it. It is not allowed for multiple foxes to cooperate on the same task. A fox cannot work on a task while she is being split using the hammer. It is possible to split the same fox multiple times. It is possible to split a fox both before and after she solves one of the tasks.
Compute and return the smallest amount of time in which the foxes can solve all the tasks.
这是我在 link 找到的解决方案
import java.util.*;
public class FoxAndDoraemon {
public int minTime(int[] workCost, int splitCost) {
PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
for(int i : workCost) pq.offer(i);
while(pq.size()>=2) {
int i = pq.poll();
int j = pq.poll();
pq.offer(Math.max(i, j) + splitCost);
}
return pq.poll();
}
}
最佳答案
首先,您确实了解“max(i, j) + splitCost”背后的推理。不是吗?基本上,如果您有一只狐狸,您可以将它分成两只,并独立执行每项任务。我们称此过程为“合并”。
现在假设我们有三个工作 a、b 和 c,使得 a>b>c。您可以执行 merge(merge(a,b),c) 或 merge(merge(a,c),b) 或 merge(merge(b,c),a)。计算一下,你可以证明 merge(merge(b,c),a) 在这三个中是最小的。
您现在可以使用归纳法证明此解决方案对任意数量的作业(不仅仅是 3 个)都有效。
关于java - 为什么此代码适用于此 TopCoder 概率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10355746/
如果您熟悉 TopCoder,您就会知道您的源代码会获得最终的“成绩/分数”,这取决于时间、编译次数等,其中权重最高的一项是性能。但是他们如何测试,是否有某种简单的代码(java 或 c++)可以做到
我不知道如何使用顶级编码器的离线可视化工具。这是我第一次尝试进行 topcoder 挑战。割草机挑战: https://community.topcoder.com/longcontest/?modu
这段代码在 Topcoder 上给出了一个编译错误。在 code::blocks 上,它编译时有 0 个错误和 0 个警告,打印了 vector ,但它以非零值退出,这导致窗口显示“Interesti
我一直在努力解决the following TopCoder problem : You are playing a strategy game and you wish to train the s
我正在尝试理解问题 DivFreed2在 TopCoder 上: 它具体规定了数组 数组的长度为n。 每个元素都是 1 到 k 之间的整数,包括 1 和 k。 只要 A 和 B 是数组的两个连续元素(
这是一道来自 Topcoder SRM 566 Div2 的算法题。 问题可以查看here . 对于那些没有 topcoder 帐户的人,问题描述如下: Penguin Pals 是一项配对服务,使用
我正在尝试解决这个顶级编码器问题。看了解法分析还是看不懂。 解决方案的基本思路是逆向思考,插入元素而不是删除。但这如何降低问题的复杂性? 我明白这是一个动态规划问题。我在维基百科上读到,DP问题避免重
我正在尝试为 TopCoder 中的一个问题提交解决方案,这需要提交遵循其预定义的类和方法。由于我是 TopCoder 的新手,我主要是在尝试适应编码界面。这段代码在我的电脑上编译完美。不幸的是,在
下面的代码是一个流行的 topcoder 问题的答案 FourBlocks (您需要登录)。该解决方案使用位掩码内存来使用大小为 1 的 block 和大小为 4 的正方形 block 来查找网格中的
这是在 TopCoder 竞赛中使用的问题。我了解大部分解决方案,它本质上是在任何时间点跟踪特定节点的最佳解决方案,并且在到达目标节点后可以输出最佳解决方案。但是,该解决方案使用 BFS,我很困惑,因
自 HOURS 以来,我一直在努力思考这个 TopCoder 问题,但无法找到一个完美的解决方案,并找到了下面给出的一个使用得非常漂亮的解决方案! 我想弄清楚这个解决方案如何适用于给定的问题?而我当初
我最近加入了 TopCoder,过去几天一直在练习室练习。我遇到了这个我似乎无法解决的问题。任何帮助将不胜感激。 问题 The product value of a string is the pro
在TopCoder或ACM ICPC的比赛中编写中高难度程序的优秀程序员,在提交前必须确保算法的正确性。 虽然他们提供了一些示例测试用例来确保正确的输出,但是它如何保证程序会正确运行?他们可以自己写一
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我是TopCoder的新手,想登录TopCoder Arena时很迷茫。 我已经注册并选择了我想参加 TopCoder 比赛,然后当我打开从网站下载的 jnlp 文件时。它显示了当前的登录页面。但是,
我想构建一个可下载的桌面软件,向用户显示带有示例问题的 GUI。 然后用户继续编写解决方案并将其粘贴到空白屏幕。 程序对其进行评估并给用户打分。用户进入下一级别。 我的问题是,这些网站如何评估程序的正
我想实现一个测试用例,它将运行特定的 java 类,然后向它提供输入并从中获取输出。 所以,这里有三个问题: 1) 我们如何从 junit 运行另一个 java 类?我们需要运行命令行来执行此操作吗?
我的以下代码适用于其他 https 站点,但不适用于 TopCoder。输出文件如下: Can't connect to community.topcoder.com:443 LWP::Protoco
我一直卡在问题grafixMask现在一天。这是我按照 DFS 教程中的伪代码编写的代码。我认为我的代码不遵守决定包含哪个网格的条件,导致错误的答案,但我不知道如何解决它。 #include
我正在尝试解决 JanuszInTheCasino problem其中一个测试用例 (test_one) 失败。我无法弄清楚问题所在。有什么想法吗? 代码如下: import java.util.Ma
我是一名优秀的程序员,十分优秀!