hdu acm 2084 数塔
来源:互联网 发布:扫雷java代码 编辑:程序博客网 时间:2024/06/05 16:59
数塔
Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 85 Accepted Submission(s) : 47
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?
已经告诉你了,这是个DP的题目,你能AC吗?
Input
Output
Sample Input
1573 88 1 0 2 7 4 44 5 2 6 5
Sample Output
30
这是一道很经典的动态规划的问题!!
这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是一个非常庞大的数目(2^30= 1024^3 > 10^9=10亿)。
考虑下:
从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,直到倒数第二层时就非常明了。如数字2,只要选择它下面较大值的结点19前进就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。
结论:自顶向下的分析,自底向上的计算。
AC code:#include <stdio.h>
#define N 110
int a[N][N];
int max(int a,int b)
{
return (a>b)?a:b;
}
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
int i,j;
scanf("%d",&n);
for(i = 0; i < n; i++)
for(j = 0; j <= i; j++)
scanf("%d",&a[i][j]);
for(i = n-2; i >= 0; i--)
{
for(j = 0; j <= i; j++)
a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);
}
printf("%d\n",a[0][0]);
}
return 0;
}
- hdu acm 2084 数塔
- HDU ACM 11 2084 数塔、水题
- ACM HDU 2048 数塔
- [ACM] hdu 2084 数塔 (简单DP)
- 杭电(hdu)ACM 2084 数塔
- ACM hdu 数论题集
- HDU ACM 2097 Sky数
- HDU ACM 2072单词数
- HDU ACM 2010 水仙花数
- acm HDU p1406 完数
- ACM hdu 数论题集
- HDU 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- hdu 2084 数塔
- HDU 2084 数塔
- hdu 2084 数塔
- 详解公钥、私钥、数字证书的概念
- 递归访问二叉树的3种遍历方法
- 详细透彻的分析DM9000网卡驱动程序(3)---谁是谁的谁?
- VS2005下如何安装WTL
- SGI STL 安装
- hdu acm 2084 数塔
- 【hdu 2544】 最短路 (dijkstra 写的第一个最短路,也是dijkstra算法,纪念一下)
- Android ApiDemos示例解析(119):Views->Gallery->1. Photos
- 利用Digium卡搭建一个小型的asterisk电话系统 (二、添加Mysql支持)
- HDU-2203(KMP)
- 十个方法,让你的线框原型更具沟通能力
- 关于个性化搜索
- hibernate映射list类型
- 入职了,纪念一下