从n行到第一行的:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<cmath> #include<memory.h> using namespace std; int dp[102][102]; int main() { int n,i,j; memset(dp,0,sizeof(dp)); cin>>n; for(i=0;i<n;i++) { for(j=0;j<=i;j++) { cin>>dp[i][j]; } } for(i=n-2;i>=0;i--) { for(j=0;j<=i;j++) { dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]); } } cout<<dp[0][0]<<endl; return 0; }
从1到n:
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<cmath> #include<memory.h> using namespace std; int dp[102][102]; void clear() { memset(dp,0,sizeof(dp)); } int main() { int n,i,j; while(scanf("%d", &n)!=-1) { for(i=1;i<=n;i++) for(j=1;j<=i;j++) scanf("%d",&dp[i][j]); for(i=2;i<=n;i++) { dp[i][1]+=dp[i-1][1]; for(j=2;j<i;j++) { dp[i][j]+=max(dp[i-1][j-1],dp[i-1][j]); } dp[i][i]+=dp[i-1][i-1]; } int maxn=dp[n][1]; for(i=1;i<n;i++) if(dp[n][i]>maxn) maxn=dp[n][i]; cout<<maxn<<endl; } return 0; }