经典动规题 #include<iostream> #include<fstream> #include<string> #include<memory.h> #include<cstdio> #include<queue> #include<vector> using namespace std; int in[1001][1001]; int dp[1001][1001]; int main(){ ifstream fin("numtri.in"); ofstream fout("numtri.out"); int r,i,j; fin>>r; for(i=1;i<=r;i++){ for(j=1;j<=i;j++){ fin>>in[i][j]; } } for(i=1;i<=r;i++){ for(j=1;j<=i;j++){ if(j==1) dp[i][j]=dp[i-1][j]+in[i][j]; else if(j==i) dp[i][j]=dp[i-1][j-1]+in[i][j]; else{ dp[i][j]=(dp[i-1][j-1]>dp[i-1][j]?dp[i-1][j-1]:dp[i-1][j])+in[i][j]; } } } int max=-1; for(i=1;i<=r;i++){ if(dp[r][i]>max) max=dp[r][i]; } fout<<max<<endl; return 0; }