数塔

题目链接   :                    http://acm.hdu.edu.cn/showproblem.php?pid=2084

前不久,遇到一个DP题,当时没想到是数塔,没思路之下便搜了一部分代码,看到有个和数塔类似的做法,便学了那个自上往下处理的方法;

巧的是在一次竞赛中出现了那题,结果过不去,我自己出的数据也过不去,本以为我自己写错了程序,没想到竞赛结束后用那个代码运行我的那个数据竟然是错的答案;

后来问了别人,别人说那个算法是错的,之所以之前对,那是测试实例太弱;所以有很加学习了数塔,希望这次是学有所得,受打击了错不起了,不想错了:

这个DP应该也可以,只是为了感受或者说用下数塔,代码如下:

View Code
# include<stdio.h>
# include<string.h>
int dp[120][120];
int max(int a,int b)
{
if(a>b)
return a;
return b;
}
int main()
{
int i,j,n,t;
scanf("%d",&t);
while(t--)
{
memset(dp,0,sizeof(dp));
scanf("%d",&n);
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
scanf("%d",&dp[i][j]);
}
for(i=n-2;i>=0;i--)
{
for(j=0;j<=i;j++)
dp[i][j]=dp[i][j]+max(dp[i+1][j],dp[i+1][j+1]);
}
printf("%d\n",dp[0][0]);
}
return 0;
}

  

  

posted on 2011-08-11 09:45  world_ding  阅读(168)  评论(0编辑  收藏  举报