对数塔的理解hdu 2084 数塔

本文深入探讨了数塔问题的动态规划解决方案,通过自上而下的处理方式,详细讲解了如何在给定的数塔中找到从顶部到底部的最大路径和。文章包括完整的代码示例,并对比了错误算法与正确算法的区别,强调了测试实例强度的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数塔

题目链接   :                    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;
}
 
  

  

  

转载于:https://www.cnblogs.com/world-ding/articles/2134477.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值