力扣的零錢兌換問題:
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
示例 2:
輸入: coins = [2], amount = 3
輸出: -1
class
solution
f分別表示是拼出x所需最少硬幣數;拼出x-1所需最少硬幣數,加上最後一枚硬幣1; 拼出x-2所需最少硬幣數,加上最後一枚硬幣2,x-5同理。
if(i>=coins[j]
&&f[i-coins[j]
]!=integer.max_value)
這裡不是遞迴,用for迴圈從小到大的實現比遞迴少了很多重複計算。}}
}if(f[amount]
==integer.max_value)
return f[amount];}
}
題2:乙個機械人位於乙個 m x n 網格的左上角 (起始點在下圖中標記為「start」 )。
機械人每次只能向下或者向右移動一步。機械人試圖達到網格的右下角(在下圖中標記為「finish」)。
問總共有多少條不同的路徑?
class
solution
else}}
return f[m-1]
[n-1];
}}
演算法筆記 動態規劃1
動態規劃適合求解最優問題,比如最大值最小值等。它可以顯著的降低時間複雜度,提高 的執行效率。0 1 揹包問題 在上篇總結中,用回溯演算法解決了 0 1揹包問題。但是,在求解的過程中,我們應該能想象的出,有些步驟是一直在重複執行。如果揹包的總載重為 9 物品個數為 5 質量分別為 2,2,4,6,3 ...
動態規劃學習筆記(1)
記錄一下慕課學習的筆記,以及例題 遞迴函式有n個引數就定義乙個n維的陣列,陣列的下標是遞迴函式引數的取值範圍。這樣就可以從邊界值開始逐步填充陣列,相當於計算遞迴函式值的逆過程。eg 例題1數字三角形 1.將原問題分解為子問題 將原問題分解為若干個子問題,與原問題的形式相同或類似,只不過規模小了。子問...
演算法筆記 動態規劃 1
求解方法 標準的01揹包問題是指,有n int型 個物品和最多裝重量w int型 的揹包。weight陣列表示物品的重量,即weight i 表示第i個物品的重量 value陣列表示物品的價值,即value i 表示第i個物品的價值。問把哪些物品裝入揹包使得物品價值總和最大,每個物品只能裝一次。舉例...