我正在解决有关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,这样每当一个强盗在插槽中完成时,下一个就取代他的位置 如果所有劫匪都能得到适应,那么成功,否则失败。
答案 0 :(得分:0)
修改:正如JonTheMon所述,当G = 6
和a = {2, 2, 2, 3, 3}
时,您的方法会失败。
无论如何,你的想法是错误的,你将无法以这种方式解决问题。这是一个提示:
这是一个经典的DP问题。
包含错误测试用例的旧帖子:
允许G = 4
和a[] = {1, 2, 2, 3}
。
据我了解你的方法,你将首先容纳强盗a_1和a_2。 a_1完成后,你将在他的位置上引入a_3。然而,这使得a_4在保险库中没有足够的时间 - 只有2分钟他想进入至少3个。
答案 1 :(得分:0)
我会尝试双通。首先,将劫匪想要的所有时间加起来,然后减半并向上舍入。那是你理想的时间。 (在这一点上,检查你的一个强盗是否达到/超过这个数额;如果是,那就是你的限制。)然后,尝试让强盗适应那个时间范围。如果你能均匀地适应它们,你就会很好。否则,请增加时间并重试。