有人可以告诉我这个逻辑有什么问题吗?

时间:2014-09-10 18:22:54

标签: c++ algorithm

我正在解决有关Hackerrank的问题。以下是问题(简要说明):

有劫匪试图抢劫银行。他们可以在那里停留近G分钟。只有两名劫匪可以一次进入保险库。

a[]={a_1,a_2,...,a_n} 是用户指定的数组, a_i i_th 强盗希望留下的时间在保险库中。

如果所有劫匪都愿意,抢劫就会成功。

鉴于 n,G, a[]; 输出必须是"成功"或者"失败"。

我的逻辑如下: 按降序排序(a)  分别为Vault中的第一人和第二人定义slot1和slot2  slot1中= slot2中= G  从排序的a中填写slot1和slot2,这样每当一个强盗在插槽中完成时,下一个就取代他的位置 如果所有劫匪都能得到适应,那么成功,否则失败。

2 个答案:

答案 0 :(得分:0)

修改:正如JonTheMon所述,当G = 6a = {2, 2, 2, 3, 3}时,您的方法会失败。

无论如何,你的想法是错误的,你将无法以这种方式解决问题。这是一个提示:

  

这是一个经典的DP问题。

包含错误测试用例的旧帖子

允许G = 4a[] = {1, 2, 2, 3}

据我了解你的方法,你将首先容纳强盗a_1和a_2。 a_1完成后,你将在他的位置上引入a_3。然而,这使得a_4在保险库中没有足够的时间 - 只有2分钟他想进入至少3个。

答案 1 :(得分:0)

我会尝试双通。首先,将劫匪想要的所有时间加起来,然后减半并向上舍入。那是你理想的时间。 (在这一点上,检查你的一个强盗是否达到/超过这个数额;如果是,那就是你的限制。)然后,尝试让强盗适应那个时间范围。如果你能均匀地适应它们,你就会很好。否则,请增加时间并重试。