数字三角形 计算最大路径 动态规划
以所经过的权值之和最大值为例进行说明。
行进的过程中,每次只有两种选择:向左或向右。一个有n层的数字三角形的完整路径有2n条,所以当n比较大的时候,搜索全部路径,从中找出最大值,效率较低。
采用动态规划方法实现。
用d(i,j)表示从位置(i,j)出发时得到的最大值(包括位置(i,j)本身),可以写出最大值的递归方程:
由于递归方程中包含了重复子问题,直接采用递归方程求解, 效率较低。采用动态规划的方法,用一张二维表记录中间过程的值,可以把时间效率提高到n2。
#include<stdio.h>
#define N 100
#include<string.h>
int MAXSUM(int a[][N],int n,int x[])
{int i,j,t;for(i=n-1;i>=1;i--){ //从最底层开始寻找for(j=1;j<=i;j++){ //每行遍历if(a[i+1][j]>a[i+1][j+1]){ //左边分支大a[i][j]+=a[i+1][j];t=a[i+1][j]; //用于记录路径}else{ //右边分支大a[i][j]+=a[i+1][j+1]; t=a[i+1][j+1]; //用于记录路径}}x[i]=t;}return a[1][1]; //一直累加到顶端
}void main()
{int i,j,n,first;int a[N][N],x[N];printf("需要输入多少层的三角形?\n");scanf("%d",&n);printf("开始输入数字三角形数据:\n");for(i=1;i<=n;i++){for(j=1;j<=i;j++){scanf("%d",&a[i][j]);}}first=a[1][1];printf("第一层到最后一条路经过的权值最大值为: %d\n",MAXSUM(a,n,x));printf("所经过的路径是:\n");printf("%d->",first);for(i=1;i<=n-2;i++){printf("%d->",x[i]-x[i+1]);}printf("%d\n",x[n-1]);getchar();
}
三角形矩阵最大路径 行走方式只有左右两种方式 如果把问题看出二叉树 那么问题就看得明白了
把我输入的值 做为例子所讲
不管几层原理都一样 选择了较大的 只能一路走下去
数字三角形 计算最大路径 动态规划相关推荐
- 数字三角形求最大路径
/**问题描述] 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径. 对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最 大的和.路径上的每一步只能从一个数走到下一层 ...
- linux中倒三角的代码,数字三角形(递归、动态规划)
题目描述: 计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大(每个数字可以选择往左下或者右下方向,例如下图中的"3"可以选择数字"8"或者" ...
- 【动态规划】数字三角形c语言
本学期的的算法实践课的实验作业.写的不好请大家多多指教. [题目] 试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过的数字总和最大. 数据输入: 由文件input.txt提供输入数据.文 ...
- 问题描述 给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底
问题描述 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径 ...
- 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...
算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...
- C++数字三角形问题(动态规划)
一.问题描述 ★问题描述:给字一个由n行数字组成的数字三角形(等腰三角形).试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. ★算法设计:对于给定的由n行数字组成的数字三 ...
- 经典算法——数字三角形的三种解题方法:递推、记忆化搜索、动态规划
上题目链接: http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/1730.html 递推方法: i ...
- 数字三角形问题(动态规划)
目录 问题描述 分析 问题描述 问题描述:给定一个由n行数字组成的数字三角形,如图所示.图数字三角形试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 算法设计:对于给定的 ...
- 用java解决数字三角形问题(动态规划)
问题描述:试设计一个算法,计算出从三角形的顶到底的一条路径,使该路径经过的数字总和最大,输出最大值和具体路径. 算法构思:采用动态规划的方法自底向上求解较大值,并将每次求的的值保存到一个二维数组中,该 ...
最新文章
- 阿里云服务器问题攻略
- xcode 4.3 调试的时候显示汇编,怎么办
- php调用shell脚本安全,从PHP调用的shell脚本问题
- python 0基础起步学习day2
- 微软推出了一款能帮你“做题”的数学应用
- 快乐的Linux命令行--读书笔记1
- 早上起床后喝的第一杯水不要喝太多
- C# RangeHelper
- 如何在Mac上创建和引导Linux USB驱动器
- icmp数据包BE、LE解释
- 天翎开源,是一种技术,更是一种信仰
- MOOC大奖赛现场统分(10分)
- w ndows键盘哪个键,B.O.W航世的蓝牙键盘的BackSpace键失灵怎么办?Windows修改键盘映射帮到你。...
- oracle按年同比环比,oracle中sum和case when的结合使用(求同比和环比)
- 大数据云计算支撑公安工作跨越发展
- 使用华为手机怎么从网上打印资料?
- 切蛋糕(洛谷P1714)
- 【leetcode刷题】73.商品折扣后的最终价格——Java版
- 自己动手搞个印象笔记桌面版
- ws832设置虚拟服务器,华为WS832路由器