我在學習動態編程,並且在理解更復雜的問題時遇到了很多麻煩。當遇到問題時,我被教會找到一個遞歸算法,記憶遞歸算法,然後創建一個迭代的,自下而上的版本。幾乎在每一步我都有一個問題。就遞歸算法而言,我寫了不同的方法來執行遞歸算法,但只有一種方法通常適用於動態編程,而且我無法區分遞歸算法的哪些方面使記憶更容易。就memoization而言,我不明白哪些值用於指數。爲了轉換爲自下而上的版本,我無法確定填充陣列/雙數組的順序。查找低於或等於某個值的最大子序列
這是我的理解: - 它應該是可以分割的主要問題子問題
中提到的問題來看,我想出了一個遞歸算法有代碼的這些重要品系:
int optionOne = values[i] + find(values, i+1, limit - values[i]);
int optionTwo = find(values, i+1, limit);
如果我不清楚或這不是正確的qa網站,請告訴我。
編輯:
實例:假設數組x:[4,5,6,9,11]和max值m:20
x中最大特亞或等於m。將[4 ,5,11] as 4 + 5 + 11 = 20
如果你舉一個例子,最好給我們展示一下你的意思是「最大子序列低於一定值」。 – Shashank
我認爲你所描述的問題是一個0-1揹包問題,其中值相等。動態規劃解決方案在這裏給出.http://en.wikipedia.org/wiki/Knapsack_problem –