數塔 HDU 2084——(動態規劃)
阿新 • • 發佈:2018-12-16
思路:從上往下推,數越來越多,結果狀態太多,不好處理;則由下往上推,越往上數越少,最終歸於一個數。
狀態方程:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];
C++程式碼實現:
#include<stdio.h> #include<iostream> #include<algorithm> #include<string.h> using namespace std; int dp[102][102], a[102][102]; int main() { int C, n, i, j; scanf("%d", &C); while(C--) { scanf("%d", &n); for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { scanf("%d", &a[i][j]); } } memset(dp, 0, sizeof(dp)); for(i=n; i>0; i--) { for(j=1; j<=i; j++) { dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + a[i][j]; } } printf("%d\n", dp[1][1]); } return 0; }