[hdu2084]数塔
数字三角形

1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <cstring> 5 #include <cstdlib> 6 #include <queue> 7 #include <string> 8 #include <vector> 9 using namespace std; 10 11 int a[500][500],f[500][500],C,n; 12 13 int dp(int i,int j){ 14 if(f[i][j]!=-1)return f[i][j]; 15 if(i==n)return f[i][j]=a[i][j]; 16 int x=dp(i+1,j); 17 if(j+1!=-1)x=max(x,dp(i+1,j+1)); 18 return f[i][j]=x+a[i][j]; 19 } 20 21 int main(){ 22 scanf("%d",&C); 23 while(C--){ 24 memset(f,-1,sizeof(f)); 25 memset(a,-1,sizeof(a)); 26 scanf("%d",&n); 27 for(int i=1;i<=n;i++) 28 for(int j=1;j<=i;j++) 29 scanf("%d",&a[i][j]); 30 printf("%d\n",dp(1,1)); 31 } 32 }