经典的DP题目,自下而上进行,状态转移方程为
dp[i][j] = max(dp[i+1][j],dp[i+1][j+1])+data[i][j];
#include <iostream>
#include <cstdio>
using namespace std;
#define MAXN 110
int main(){
int n;
int data[MAXN][MAXN]={0};
int dp[MAXN][MAXN]={0};
scanf("%d",&n);
for(int i=1;i<=n;++i){
for(int j=1;j<=i;++j){
scanf("%d",&data[i][j]);
}
}
for(int i=1;i<=n;++i)
dp[n][i] = data[n][i];
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])+data[i][j];
}
}
printf("%d\n",dp[1][1]);
//system("pause");
return 0;
}