2014-09-10 111 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

我會嘗試進行雙傳。首先,把所有劫匪都想要的時間累加起來,然後減半和收起來。那是你理想的時間。 (在這一點上,檢查一下你的強盜是否超過了這個數量;如果是,那麼這就是你的限制)。然後,試着讓強盜進入這個時間框架。如果你能均勻地適應他們,你很好。否則,增加時間並重試。

相關問題