数塔

 

这是数塔最为简单的一体。主要思路便是从最后一行开始往前加,利用dp[i][j]=max(dp[i+1][j],dp[i+1][j+1]);最后得出dp[0][0];便可以得出最大的那一条路径;

dp是个很重要的算法,自己要认真学啊!

View Code
 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 }
posted @ 2012-04-18 22:53  SmallMushroom  阅读(201)  评论(0编辑  收藏  举报