数塔
这是数塔最为简单的一体。主要思路便是从最后一行开始往前加,利用dp[i][j]=max(dp[i+1][j],dp[i+1][j+1]);最后得出dp[0][0];便可以得出最大的那一条路径;
dp是个很重要的算法,自己要认真学啊!
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<string.h> 3 int max(int a,int b) 4 { 5 return a>b?a:b; 6 } 7 int main() 8 { 9 int num,line; 10 int i,j; 11 int dp[1000][1000]; 12 scanf("%d",&num); 13 while(num--) 14 { 15 memset(dp,0,sizeof(dp)); 16 scanf("%d",&line); 17 for(i=0;i<line;i++) 18 { 19 for(j=0;j<=i;j++) 20 scanf("%d",&dp[i][j]); 21 } 22 for(i=line-2;i>=0;i--) 23 { 24 for(j=0;j<=i;j++) 25 { 26 dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]); 27 } 28 } 29 printf("%d\n",dp[0][0]); 30 } 31 return 0; 32 }