2014-09-10 118 views
0

我在解决Hackerrank问题。以下是问题(简要):有人可以告诉我这个逻辑有什么问题吗?

有n劫匪试图抢劫银行。他们可以在最G几分钟内呆在那里。一次只有两名劫匪可以进入金库。

a[]={a_1,a_2,...,a_n}是用户指定的阵列,使得a_ii_th强盗希望留在库中的时间。

如果所有的劫匪得到他们的意愿,抢劫案是成功的。

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

我的逻辑如下: 排序的(a)以降序 限定slot1中和slot2中用于在拱顶第一和第二人分别 slot1中= slot2中= G 从排序的,例如在时隙1和时隙2中填每当一个强盗在槽内完成时,下一个就会占据他的位置 如果所有的强盗都可以被接纳,那么成功,否则失败。

+4

为什么你的逻辑有问题? – djechlin 2014-09-10 18:25:14

+1

如果你用强盗'{2,2,2,3,3}'的方案,你的逻辑将会失败,因为你想为你的群体拥有'2-2-2'和'3-3' – JonTheMon 2014-09-10 18:30:57

+1

Can一个强盗进入金库两次? – cmaster 2014-09-10 18:42:27

回答

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.

+4

*排序(a)降序排列* – 2014-09-10 18:30:59

+0

@AntonSavin你说得对。我可以改正它,但似乎JonTheMon已经写下了落在测试用例后面的直觉。 – yasen 2014-09-10 18:34:15

+0

@AntonSavin *降序*是的,但反例的逻辑仍然成立。 – cmaster 2014-09-10 18:44:21

0

我会尝试进行双传。首先,把所有劫匪都想要的时间累加起来,然后减半和收起来。那是你理想的时间。 (在这一点上,检查一下你的强盗是否超过了这个数量;如果是,那么这就是你的限制)。然后,试着让强盗进入这个时间框架。如果你能均匀地适应他们,你很好。否则,增加时间并重试。

相关问题