開始動態規劃的學習了,先是比較基礎的,很經典的數塔。附上題目鏈結
這題的狀態轉移方程是 dp[i][j] = max(dp[i-1][j-1],dp[i-1][j]) + m[i][j]; (dp[i][j] 表示在第 i 層 第 j 列時的最大和) 。 然後乙個雙重迴圈,便能算出。當然可以用滾動陣列。但是注意用滾動陣列解題時,第二層迴圈 j 必須從大到小, 因為 狀態轉移方程 為 f [ j ] = max( f[ j-1 ], f[ j ] ) + m[ i ] [ j ]; 每次更新都要用到前面的 j - 1 所以如果從小開始,不就被更新了,不在是上次迴圈的值了。結果錯誤。
**:
#include usingnamespace
std;
/*hdu 2084 數塔
*/int m[101][101
];int dp[103][103
];int f[104
];int
n;//二維陣列版
void
dp ()
}int mx = 0
;
for (int j =1;j<=n;++j)
if (dp[n][j] > mx) mx =dp[n][j];
cout
<< mx <} //
滾動陣列版
void
d_p()
}cout
<< mx <}int
main ()
}d_p ();
}
return0;
}
動態規劃(DP) 數塔問題。HDU 2084
在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?input 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整...
hdu 2084 數塔(動態規劃)
problem description 在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?輸入資料首先包括乙個整數c,表示測試例項的個數,...
HDU 2084 數塔 動態規劃
在講述dp演算法的時候,乙個經典的例子就是數塔問題,它是這樣描述的 有如下所示的數塔,要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?已經告訴你了,這是個dp的題目,你能ac嗎?輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n...