HUD2084 数塔 -- 动态规划
来源:互联网 发布:淘宝运营合作 编辑:程序博客网 时间:2024/06/05 18:59
数塔
Time limit 1000 ms Memory limit 32768 kB OS Windows
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
Input
Output
Sample Input
1573 88 1 0 2 7 4 44 5 2 6 5
Sample Output
30
解题思路:
状态转移方程:
第一种:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + mp[i][j];
第二种:dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + mp[i][j];
两种思路都可以
代码是用来第二种的思路。//#include<bits/stdc++.h>#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int maxn = 100 + 10;int mp[maxn][maxn], dp[maxn][maxn];int n;int main(){ int t; cin >> t; while(t--) { memset(mp, 0, sizeof(mp)); memset(dp, 0, sizeof(dp)); cin >> n; for(int i = 1; i <= n; i++) { for(int j = 1; j <= i; j++) { cin >> mp[i][j]; } } dp[1][1] = mp[1][1]; for(int i = 2; i <= n; i++) { for(int j = 1; j <= i; j++) { dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + mp[i][j]; } } int ans = -1; for(int i = 1; i <= n; i++) ans = max(ans, dp[n][i]); cout << ans << "\n"; } return 0;}
阅读全文
1 0
- HUD2084 数塔 -- 动态规划
- 数塔 动态规划
- 数塔 动态规划
- 动态规划-数塔
- 动态规划-塔数
- 动态规划--数塔
- 动态规划----数塔问题
- HDU2084--动态规划数塔
- 数塔问题----动态规划
- 数塔 ( 动态规划)
- 动态规划~数塔问题
- HDU2084 数塔 动态规划
- 动态规划:数塔问题
- [动态规划]数塔问题
- hdu2084 数塔 (动态规划)
- 动态规划 数塔问题
- 动态规划 数塔问题
- 数塔—动态规划
- Unicode与UTF-8的区别理解
- 实现斐波那契数列(跳台阶问题)
- gitlab 升级
- 正则表达式匹配 --所有语言通用
- libevent 安装与应用
- HUD2084 数塔 -- 动态规划
- 美团外卖,饿了么,百度外卖我只想用一台打印机??
- mysql 行锁小技巧 索引对行锁的影响 批量update的时候容易出现死锁
- 收藏一下地址
- 关于 python 的 IDE
- Redis单机版安装图文教程
- [leetcode]86. Partition List@Java解题报告
- python基础学习-集合数据类型
- 最全的 CSS2.1 和 CSS3+ 的区别一览