動態規劃求解數塔問題 程式碼
阿新 • • 發佈:2019-01-10
/* 5 5 8 3 12 7 16 4 10 11 6 9 5 3 9 4 */ #include<iostream> #define maxn 1000 using namespace std; int dp[maxn][maxn]; //dp[i][j]表示第i行第j列出發到達最底層的所有路徑中的最大和 int maze[maxn][maxn]; //這裡若是maxn定義750及以上,只能定義成全域性變數,放在main函式里程序會閃退,最好定義成全域性變數 int n; int main() { scanf("%d",&n); for(int i = 1; i <= n; i++) { for(int j = 1; j <= i; j++) { scanf("%d",&maze[i][j]); } } //邊界 for(int j = 1; j <= n; j++) { dp[n][j] = maze[n][j]; } //狀態轉移方程 for(int i = n-1; i >= 1; i--) { for(int j = 1; j <= i; j++) { dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + maze[i][j]; } } printf("%d", dp[1][1]); return 0; }
具體解釋有空再補
測試用例:
5
5
8 3
12 7 16
4 10 11 6
9 5 3 9 4
執行結果:
44