【HDU2048】数塔(简单动态规划/DP)
来源:互联网 发布:长沙seo推广 编辑:程序博客网 时间:2024/06/05 19:21
数塔
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 20786 Accepted Submission(s): 12486
Problem Description
在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
Input
输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。
Output
对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
Sample Input
1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
解析:就是将一条一条路线找这种方式简化为部分问题。从倒数第二层开始,不断向上。并将这层的下次的可以连接的两个数字中选大的加上去,这样,加到第一层时,第一层就是最大的数字了。
#include "iostream"#include "cstdio"#include "cstring"#include "algorithm"using namespace std;const int maxn = 1e2+5;int map[maxn][maxn];int dp[maxn][maxn];int n;int max(int a,int b){ return a>b ? a:b;}int main(){ int T; scanf("%d",&T); while(T--){ scanf("%d",&n); for( int i=1 ; i<=n ; i++ ){ for( int j=1 ; j<=i ; j++ ){ scanf("%d",&map[i][j]); } } for( int i=1 ; i<=n ; i++ ){ dp[n][i]=map[n][i]; } for( int i=n-1 ; i>=1 ; i-- ){ for( int j=1 ; j<=i ; j++ ){ dp[i][j] = map[i][j] + max( dp[i+1][j],dp[i+1][j+1] ); } } printf("%d\n",dp[1][1]); } return 0;}
0 0
- 【HDU2048】数塔(简单动态规划/DP)
- HDU2084 数塔 DP动态规划经典
- dp 数塔 经典动态规划问题
- HDU2048 数塔
- HDU2048 数塔
- dp 数划分 动态规划
- hdu 2084 数塔 动态规划 简单
- DP 动态规划简单总结
- HDU1260 动态规划 简单DP
- DP动态规划——hdu 2084 数塔
- DP 动态规划 Problem F 1006 数塔问题
- HDU 2084 数塔(动态规划DP)
- 动态规划:数塔问题 hdu 2084 dp
- 数塔 动态规划
- 数塔 动态规划
- 动态规划-数塔
- 动态规划-塔数
- 动态规划--数塔
- SIFT中的尺度空间和传统图像金字塔
- Android Image 圆角图片与圆形图片 ImageView
- 蛇形矩阵
- 1sting hd 1865
- python组合数据类型
- 【HDU2048】数塔(简单动态规划/DP)
- Linux C编程实战——第六章 文件操作_项目实现_自写ls命令
- 用httpPost对Json发送和接收的例子
- 2016/07/20 多线程
- Xib文件的建立与显示
- Base64小记
- iOS 边缘滑动返回
- HDOJ 2089 不要62
- MinGW 下编译 libcurl