博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DP (入门题)数塔
阅读量:6370 次
发布时间:2019-06-23

本文共 1161 字,大约阅读时间需要 3 分钟。

对于DP,我实在是搞不懂实在干什么的?弄清出一点,我就会改博客的,那就再别人休息的时候搞搞吧!;

在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:

有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?

Input

输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间0,990,99内。

Output

对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。

Sample Input

1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

Sample Output

30

思路:把这个塔看成一个二维数组,看书时得到的启发,

然后找到它们中间的规律。
dp[i-1][j]=max(dp[i-1][j]+dp[i][j],dp[i-1][j]+dp[i][j+1]);;
然后就没有然后了。

#include
#include
using namespace std;#include
int dp[100][100];int main(){ int t; scanf("%d",&t); int n; while(t--) { memset(dp,0,sizeof(dp)); scanf("%d",&n); int i,j; for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { scanf("%d",&dp[i][j]); } } for(i=n;i>=1;i--) { for(j=1;j<=i-1;j++) { dp[i-1][j]=max(dp[i-1][j]+dp[i][j],dp[i-1][j]+dp[i][j+1]); } } printf("%d\n",dp[1][1]); } return 0;}

转载于:https://www.cnblogs.com/zxy160/p/7215171.html

你可能感兴趣的文章
《众妙之门——移动交互体验设计》—— 1.3 未来科技
查看>>
《全球互联网金融商业模式:格局与发展》——第3章,第5节2016年发展总结
查看>>
一次dns缓存引发的惨案
查看>>
Webpack 2 入门
查看>>
SSL/TLS 加密新纪元 - Let's Encrypt
查看>>
《SPSS 统计分析从入门到精通(第2版)》一6.8 两个相关样本的检验
查看>>
《信息存储与管理(第二版):数字信息的存储、管理和保护》—— 2.14 小结...
查看>>
《Hack与HHVM权威指南》——1.5 规则
查看>>
RecyclerView Part 2:选择模式
查看>>
特斯拉CEO马斯克父亲专访:亿万富翁是如何养成的?
查看>>
C 和 C++字符串详解
查看>>
Centos 7 安装 Xen
查看>>
Netty学习1—传统单线程服务端
查看>>
微信Token验证代码的实现
查看>>
【D3.js 学习总结】3、D3选择器
查看>>
C# 对于时间的相关问题
查看>>
小程序实现原理解析
查看>>
JavaScript 闭包
查看>>
java 调用 python(使用jpython)
查看>>
真实项目运用-RecyclerView封装
查看>>