算法 数字三角形问题
2016-12-25 17:00
288 查看
题目
给定一个由n行数字组成的数字三角形,设计算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大测试用例:
5(行数)
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:30
分析
用二维数组f[i][j]表示第i行的第j个数能得到的最大值: f[i][j]=max{f[i-1][j-1],f[i-1][j]}+map[i][j] 其中map是给定值的数组 每行第一个只能选择上一行的第一个 f[i][1]=f[i-1][1]+map[i][1]; 每行最后一个只能选择上一行的最后一个 f[i][i]=f[i-1][i-1]+map[i][i];
#include <iostream> #define n 5 int f[10][10]; int getmax(int a, int b){ return a>b?a:b; } int main(){ int i,j,maxValue=0; int map[n+1][n+1]; for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ printf("请输入第%d行,第%d个数:",i,j); scanf("%d",&map[i][j]); } } f[1][1]=map[1][1]; for(i=2;i<=n;i++){ for(j=1;j<=i;j++){ if(j==1) f[i][j]=f[i-1][j]+map[i][j];//每行的第一个 else if(j==i) f[i][j]=f[i-1][j-1]+map[i][j];//每行的最后一个 else f[i][j]=getmax(f[i-1][j-1],f[i-1][j])+map[i][j];//可以有两种选择的 } } for(j=1;j<=n;j++){ if(f [j]>maxValue) maxValue=f [j]; } printf("%d\n",maxValue); return 0; }
相关文章推荐
- 【算法】数字三角形问题
- 算法基础之python实现动态规划中数字三角形和最长上升子序列问题
- 数字三角形问题 算法入门经典
- 算法笔记 //14_数字三角形问题
- 算法-------统计数字问题
- 最简单的贪心算法--删除数字问题
- POJ 1163 数字三角形问题(DP)
- 数字三角形问题
- 统计数字问题[算法设计与分析]
- 甲乙两人互猜数字(鬼谷子问题)的逻辑推理与算法建模
- 算法考试填数字问题
- 统计数字问题-算法实现(暴力统计法)
- 阿里巴巴校招算法(黑板50个数字问题)
- sdut.acm 2012级《程序设计基础Ⅱ)》_动态规划 数字三角形问题
- 3-4 数字三角形问题
- 数字三角形问题--动态规划练习(1)
- 实验四 回溯算法和分支限界法 符号三角形问题
- 问题描述如下: 有2.5亿个整数(这2.5亿个整数存储在一个数组里面,至于数组是放在外存还是内存,没有进一步具体说明); 要求找出这2.5亿个数字里面,不重复的数字的个数; 另外,可用的内存限定为600M; 要求算法尽量高效,最优;
- 动态规划 问题之数字三角形(倒序递推)
- 数字三角形问题