HDU-2084 数塔
2015-08-14 20:35
176 查看
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 100 + 5; int c, n; int tower[maxn][maxn]; int main() { scanf("%d", & c); while(c --) { scanf("%d", & n); //输入行数 for(int i = 1; i <= n; i ++) for(int j = 1; j <= i; j ++) scanf("%d", & tower[i][j]); //输入数塔 for(int i = n - 1; i >= 1; i --) //从倒数第二行开始 走到(1,1) { for(int j = 1; j <= i; j ++) { if(tower[i + 1][j] > tower[i + 1][j + 1]) //分支的比较 tower[i][j] += tower[i + 1][j]; //更新分支 就如同把倒数第二行2 18 9 5 更新为 21 28 19 21 这样不断更新到顶端 else tower[i][j] += tower[i + 1][j + 1]; } } printf("%d\n", tower[1][1]); //输出顶端元素即为最大和 } return 0; }
题意:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数,且所有的整数均在区间[0,99]内。 对于每个测试实例,输出可能得到的最大和,每个实例的输出占一行。
题解:模拟写下每次节点的变换情况吧(最后一行没有分支 所以从倒数第二行开始更新)9
12 15
10 6 8
2 18 9 5
19 7 10 4 16
↓
9
12 15
10 6 8
21 28 19 21
↓
9
12 15
38 34 29
↓
9
50 49
↓
59
相关文章推荐
- PPT自动载入图片并矩阵分布
- [转]XML中元素(Element)与节点(Node)的区别
- Oracle 学习之RAC(九) 集群负载均衡及故障转移
- 【xml】xml初步总结
- 计数排序
- 关于Hibernate中的普通增删改查
- 图的基本存储的基本方式二 (链表)
- POJ 2411 大矩形用1X2小矩形填充 状态dp DFS
- --acm的思考
- C语言第12轮:指针
- Codeforces Gym 100523K K - Cross Spider 计算几何,判断是否n点共面
- 快速排序详解
- 函数指针与typedef
- java内部类学习笔记
- poj 1118
- hdu 1242 Rescue (BFS+优先队列)
- 黑马程序员--面向对象
- csu 1110 RMQ with Shifts(线段树) 解题报告
- Objective-C总Runtime的那点事儿(一)消息机制
- Monkey and Banana(LIS最长上升子序列)