本题是一个经典的动态规划题。
直接利用记忆化搜索:见图解
Ac code :
#include<stdio.h> #include<string.h> #define max(i,j) (i>j?i:j) #define maxn 105 int a[maxn][maxn]; int d[maxn][maxn]; int s(int i,int j,int n) { if(d[i][j]>=0)return d[i][j]; return d[i][j]=a[i][j]+(i==n?0:max(s(i+1,j,n),s(i+1,j+1,n))); } int main(void) { int c,n,i,j; scanf("%d",&c); while(c--) { scanf("%d",&n); memset(d,-1,sizeof(d)); for(i=0; i<n; i++) for(j=0; j<=i; j++) { scanf("%d",&a[i][j]); } printf("%d\n",s(0,0,n)); } return 0; }
时间: 2024-10-06 08:25:21