hdoj2084 数塔
来源:互联网 发布:js radio check 编辑:程序博客网 时间:2024/04/26 18:13
题解:
DP的经典题目之一,从塔的最底层一直往上走,到达顶部后途中累加的和最大的就是所要求的值。在这里,可以设置二维数组dp[i][j],表示“走到第i层、第j个元素时可以获得的最大值”。这里有两个关键的地方:
- 考虑的对象是“走到了某个位置”,而不是“从某个位置开始走”。这也是DP比如背包问题里面的一个重要思想。这样的话,状态转移方程就是:
dp[i][j] += max(dp[i+1][j], dp[i+1][j+1])
- 因为从塔的结构来说是斜的,但是从二维数组来说,上述方程只是取了下方和右下方的较大的值,所以要给第2维多留一个空间,里面的值初始化为0,否则会出现数组越界。
代码(156MS, 1836K):
#include <iostream>#include <fstream>#include <cstring> // memset#include <algorithm> // maxusing namespace std;const int maxn(101);int dp[maxn][maxn];int main() {// ifstream cin("in.txt"); int casenum; cin >> casenum; while (casenum--) { memset(dp, 0, sizeof dp); int depth; cin >> depth; for (int i = 1; i <= depth; ++i) { for (int j = 1; j <= i; ++j) { cin >> dp[i][j]; } } for (int i = depth - 1; i >= 1; --i) { for (int j = 1; j <= i; ++j) { dp[i][j] += max(dp[i + 1][j], dp[i + 1][j + 1]); } } cout << dp[1][1] << endl; } return 0;}
0 0
- HDOJ2084数塔问题
- HDOJ2084数塔问题
- hdoj2084 数塔
- <hdoj2084>数塔
- hdoj2084 数塔 (DP水题)
- hdoj2084数塔(dp)
- HDOJ2084 数塔(DP)
- HDOJ2084 数塔(动态规划)
- hdoj2084 数塔(dp基础题)
- 简单dp,hdoj2084(数塔)
- HDOJ2084 数塔(动态规划入门)
- POJ1163 HDOJ2084 THE TRIANGLE 数塔 DP启蒙
- HDOJ2084 数塔(经典的动态规划问题)
- HDOJ2084数塔--动态规划探骊(二)
- hdoj2084
- hdoj2084
- HDOJ2084
- 数塔
- Android Listview 隐藏滚动条
- Android基础和运行机制
- iOS动态分享收藏举报弹出框
- 程序使用微软雅黑作为默认字体在xp下的问题
- 2015 Objective-C 三大新特性 不可错过的iOS开发技巧
- hdoj2084 数塔
- windows后台服务如何部署到Linux
- Mac 下配置ionic
- Handler详解系列——利用Handler在主线程与子线程之间互发消息,handler详解
- iOS 中的数据持久化2.0-bruceyou1990
- Android笔记之如何获取屏幕宽高
- JavaScript Array模拟C#list RemoveAll实现删除符合条件的元素
- Java8 Lambda表达式教程
- JVM调优总结:一些概念