hdu 2084 數塔 (dp)
阿新 • • 發佈:2018-12-14
很簡單的dp問題。 以下附上ac程式碼
#include<iostream> #include<cmath> #include<cstring> # define max(a,b) ((a)>(b)?(a):(b))//巨集定義 using namespace std; int dp[101][101];//i表示第i排(從上往下),j表示該排的第j個數,整體表示以這個數為頂點的三角形的最大值; int d[101][101];//儲存資料 int main() { int t, n, i, j; cin >> t; while (t--) { memset(dp, 0, sizeof(dp)); memset(d, 0, sizeof(d));//初始化 cin >> n; for (i = 1; i <= n; i++) { for(j=1;j<=i;j++) cin >> d[i][j]; } for (i = n; i >= 1; i--) { for (j = 1; j <= i; j++) { dp[i][j] = max(dp[i + 1][j], dp[i + 1][j + 1]) + d[i][j];//狀態轉移方程; } } cout << dp[1][1] << endl; } return 0; }
感覺自己有進步,差不多一遍就ac了;