我一直停留在該PEG在線法官一個問題,所謂的多米諾,你可以在這裏找到:指針爲解決這一具有挑戰性的動態規劃任務
http://wcipeg.com/problem/domino
摘編說明:
我們給出了不同高度和位置的多米諾骨牌列表,水平排列。 x位置的高度爲h的多米諾骨牌,一旦向右推,將會在x + 1,x + 2,...,x + h位置向右敲擊所有多米諾骨牌。相反,向左推動的同一個多米諾骨牌會將位置x-1,x-2,...,x-h中的所有多米諾骨牌向左擊。
我們可以做什麼來推翻所有多米諾骨牌的最小數量是多少?
實施例:
|
| |
| | | | | |
1 2 3 4 5 6 7 8
回答是。將位置1的多米諾骨牌向右推,位置8的多米諾骨牌向左。
限制條件:
輸入開始與一個整數N≤100,000,的 骨牌的數量,隨後加入N對的整數。每對整數 代表多米諾骨牌的位置和高度。 (1≤地點≤ 1,000,000,000,1≤高度≤1,000,000,000)沒有兩個多米諾骨牌將在 相同的位置。
內存限制:64MB
時間限制:1.00S
注:測試數據的60%的具有N≤5000
有一個強力解決方案,它解決了上述問題只有60%的投入。
看起來應該有一個次級的,甚至是線性的解決方案,使用動態編程來獲得最大輸入大小的AC。
任何提示將不勝感激。
有從作者,我也不太明白,如果它是有幫助的提示:
做一個遞歸函數f(n)的給出的移動 最低#推翻需要頭n個多米諾骨牌。
現在你如何將f(n)與f的先前值相關?多米諾骨牌#n有兩個 的選擇:向左走(在這種情況下,它將其他多米諾骨牌倒過來),或者走 (在這種情況下,左邊的另一個多米諾骨牌將其倒過來)。嘗試從那裏工作 。
謝謝!
重要的是要提到最大數量的多米諾骨牌,以及它們的高度和位置限制。這些限制以及64Mb的內存限制排除了一些方法。 –
好點,增加了輸入大小約束。 –