https://www.acwing.com/problem/content/900/
典型的DP问题,状态表示f[i][j]---集合:所有从顶部走到当前位置的路径上的数字和的集合
属性:最大值
状态计算:f [ i ] [ j ]= max ( f[i-1][j-1] , f[i-1][j] )+a[i][j]
1 #include<iostream> 2 #include<climits> 3 using namespace std; 4 const int N=510; 5 int a[N][N],f[N][N]; 6 int main(void){ 7 int n; 8 cin>>n; 9 for(int i=1;i<=n;i++){ 10 for(int j=1;j<=i;j++){ 11 cin>>a[i][j]; 12 if(j==1){ 13 f[i][j]=f[i-1][j]+a[i][j]; 14 }else if(j==i){ 15 f[i][j]=f[i-1][j-1]+a[i][j]; 16 }else{ 17 f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j]; 18 } 19 } 20 } 21 int res=INT_MIN; 22 for(int i=1;i<=n;i++){ 23 res=max(res,f[n][i]); 24 } 25 cout<<res; 26 return 0; 27 }