题目链接:点击打开链接
这题和白皮的数字三角形是一样的。有很多题都是这个的变形比如1176
递归:
#include <iostream> #include<cstdio> #include<cstring> using namespace std; const int maxn=1e2+10; int a[maxn][maxn],d[maxn][maxn],n; int dp(int i,int j) { if(d[i][j]>0)return d[i][j]; return d[i][j]=a[i][j]+(i==n?0:max(dp(i+1,j),dp(i+1,j+1))); } int main() { int t,i,j; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=i;j++) scanf("%d",&a[i][j]); memset(d,-1,sizeof(d)); printf("%d\n",dp(1,1)); } return 0; }递推: #include <iostream> #include <stdio.h> #include<cstring> using namespace std; const int maxn=1e2+10; int a[maxn][maxn],flag[maxn],b[maxn][maxn]; int main() { int t,n,i,j; while(cin>>t) { while(t--) { cin>>n; memset(b,0,sizeof(b)); memset(a,0,sizeof(a)); for(i=1; i<=n; i++) for(j=1; j<=i; j++) cin>>a[i][j]; for(i=1; i<=n; i++) for(j=1; j<=i; j++) b[i][j]=max(b[i-1][j],b[i-1][j-1])+a[i][j]; int Max=0; for(i=1; i<=n; i++) if(Max<b[n][i])Max=b[n][i]; cout<<Max<<endl; } } return 0; }