給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。
相鄰的結點 在這裡指的是 下標 與 上一層結點下標 相同或者等於 上一層結點下標 + 1 的兩個結點。
示例 1:
輸入:
[
[2],
[3,4],
[6,5,7],
[4,1,8,3]
]
輸出: 11
一道很基礎的dp題,假設dp[i][j]代表在第i行,第j列時取得的最小值
那麼狀態轉移方程可以寫為
dp[i][j] =min(dp[i-1][j-1],dp[i-1][j]) + ********[i][j];
同時注意邊界問題,從上至下不斷更新dp,最後從dp的最後一行選取最小值即為正確結果。
通過**
class solution {
public:
int minimumtotal(vector>& ********) {
int m = ********.size();
vector> dp(m,vector(m));
dp[0][0] = ********[0][0];
for (int i=1;i通過滾動陣列方式可以減少空間複雜度
120 三角形最小路徑和
我現在知道怎麼結合遞迴和動態規劃的方法了,不需要寫出遞迴到方法。當熟練後,繼續用遞迴的方式思考問題,只不過是在腦中將其轉化為動態規劃,這道題就是例子。只不過我只寫出了n2的,對我來說我已經挺滿意了,畢竟我本地測試後oj一次性通過 阿,我知道了,他們到空間複雜的n是指每次只儲存上一行的值,還有人更雞賊...
120 三角形最小路徑和
給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。例如,給定三角形 2 3 4 6,5 7 4,1 8,3 自頂向下的最小路徑和為 11 即,2 3 5 1 11 說明 如果你可以只使用 o n 的額外空間 n 為三角形的總行數 來解決這個問題,那麼你的演算法會很加分。...
120 三角形最小路徑和
120.三角形最小路徑和 給定乙個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。例如,給定三角形 2 3,4 6,5,7 4,1,8,3 自頂向下的最小路徑和為11 即,2 3 5 1 11 說明 如果你可以只使用 o n 的額外空間 n 為三角形的總行數 來解決這個問題,...