一、题目
二、分析
动态规划入门题。
状态转移方程$$DP[i][j] = A[i][j] + max(DP[i-1][j], DP[i][j])$$
三、AC代码
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 #include <vector> 6 #include <cmath> 7 8 using namespace std; 9 #define ll long long 10 #define Min(a,b) ((a)>(b)?(b):(a)) 11 #define Max(a,b) ((a)>(b)?(a):(b)) 12 const int MAXN = 100; 13 int A[MAXN + 13][MAXN + 13]; 14 int Ans[2][MAXN + 13]; 15 16 int main() 17 { 18 int N; 19 while(scanf("%d", &N) != EOF) { 20 memset(A, 0, sizeof(A)); 21 memset(Ans, 0, sizeof(Ans)); 22 for(int i = 1; i <= N; i++) { 23 for(int j = 1; j <= i; j++) { 24 scanf("%d", &A[i][j]); 25 } 26 } 27 for(int i = 1; i <= N; i++) { 28 for(int j = 1; j <= i; j++) { 29 Ans[i&1][j] = A[i][j] + Max(Ans[(i-1)&1][j-1], Ans[(i-1)&1][j]); 30 } 31 } 32 int ans = 0; 33 for(int i = 1; i <= N; i++) { 34 ans = Max(ans, Ans[N&1][i]); 35 } 36 printf("%d ", ans); 37 } 38 return 0; 39 }