数字三角形(动态规划)
2013-10-31 13:00
225 查看
Problem 17: 数字三角形From Admin
Time Limit:1 Ms| Memory Limit:128 KBDifficulty:1
Description
示出了一个数字三角形。 请编一个程序计算从顶至底的某处的一条路径,使该路径所经过的数字的总和最大。
每一步可沿左斜线向下或右斜线向下走;
1<三角形行数<25;
三角形中的数字为整数<1000;
Input
第一行为N,表示有N行后面N行表示三角形每条路的路径权
Output
路径所经过的数字的总和最大的答案
Sample Input
57
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output
30
Hint
建议用动态规划,记忆化搜索也可以过。思路:
动态规划(记忆化搜索)基本思想, 由上往下递推最优结果, 最后找出最优解。(较简单的动态规划适合初学者)
#include <stdio.h> #include <string.h> #include <stdlib.h> int map[26][26], ans[26][26]; //存储输入内容 存储结果 int mymax(int a, int b) { return a > b ? a : b; } int main() { int n, i, j, max = 0; scanf("%d", &n); for(i = 1; i <= n; i++) { for(j = 1; j <= i; j++) { scanf("%d", &map[i][j]); } } memset(ans, 0, sizeof(ans)); ans[1][1] = map[1][1]; for(i = 2; i <= n; i++) { for(j = 1; j <= i; j++) { ans[i][j] = mymax(ans[i - 1][j - 1] + map[i][j], ans[i - 1][j] + map[i][j]); //在每个存储结果的单元里存入此点的最优解 } } for(i = 1; i <= n; i++) { if(ans [i] > max) { max = ans [i]; //遍历最后解, 找出最优解 } } printf("%d\n", max); return 0; }
相关文章推荐
- 算法训练 数字三角形 (动态规划)
- 数字三角形升级版(棋盘型动态规划)
- 动态规划--数字三角形问题
- POJ_3176_Cow_Bowling_(数字三角形)_(动态规划)
- poj 1163数字三角形问题--动态规划
- 动态规划--再论(数字三角形 poj1163)
- hdu 1176 免费馅饼(动态规划 数字三角形问题变形)
- 【动态规划】数字三角形2
- 数字三角形-动态规划-无
- hiho#1037 : 数字三角形 (动态规划)
- 动态规划__数字三角形
- 【动态规划】数字三角形3
- [动态规划]数字三角形、最长上升子序列
- 【动态规划】数字三角形最大和(二)(递推循环)
- 动态规划解决数字塔-数字三角形问题
- 【动态规划】数字三角形4
- 动态规划--数字三角形
- 动态规划(1)数字三角形
- 动态规划 问题之数字三角形(倒序递推)
- 【动态规划】数字三角形最大值(一)(递归)