递归算法-数字三角形
数字三角形
给定一个由n行数字组成的数字三角形,设计算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。
例子输入
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
例子输出
30
正推法
问题分析:数字三角形由上到下求解路径时,每一步都可以向左斜下方或者右斜下方进行移动。
解题思路:使用一个数组存储数字三角形的信息,另一个数组存储从上到下到达该位置的最大值,该位置的最大值情况仅有两种,一种是正上的最大值加上当前位置的值,另一种是该位置正上方前一个位置的最大值加上该位置的值,比较两种情况,选择最大值为该位置的最大值进行赋值。
代码如下
#include<iostream>
using namespace std;
int main()
{int a[100][100],dp[100][100];//a数组用来接收数字三角形里的值,dp数组存储到达该位置的最大值int i,j,N;cin>>N;//输入数字三角形的层级for(i=0;i<N;i++)for(j=0;j<=i;j++) //接收数字三角形的数字cin>>a[i][j];b[0][0]=a[0][0];//第一个值即是当前位置的最大值。for(i=1;i<N;i++){for(j=0;j<=i;j++){if(j==0)dp[i][j]=dp[i-1][j]+a[i][j]; //j为0时。即为第一行的相加else if(i==j)dp[i][j]=b[i-1][j-1]+a[i][j]; //i=j时,即为最后一斜行相加;else{int x=b[i-1][j-1]+a[i][j];//正上方位置的最大值和当前数字三角形的值的和。int y=b[i-1][j]+a[i][j];//正上方前一个位置的最大值和当前位置的数字三角形的值的和。b[i][j]=x>y?x:y;//两个值中最大的值即是的当前位置从上到下路径的最大值。}}}int max=b[N-1][0];//假设到达最后一行第一个位置的路径值为最大for(i=0;i<N;i++)//将最后一行的各个位置上的路径最大值求出来。if(max<b[N-1][i])max=b[N-1][i];cout<<max<<endl;//输出最大路径的值。
}
逆推法
解题思路:数字三角形从下向上找最大路径时,将第n行向左上方或者右上方进行移动,求出第n-1行各个位置的路径最大值,依次向上进行计算,设数组F(n)(n)为路径最大值,则最终要求的结果为F(1)(1)。
#include<iostream>
using namespace std;
const int maxn=10001;
int r,A[maxn][maxn],F[maxn][maxn];int MAX(int s,int t)
{if(s>t) return s;return t;
}//也可以使用自带的max函数。int main()
{int x,y;cout<<"请输入三角形的层级:"<<endl;cin>>r;for(x=1;x<=r;x++)for(y=1;y<=x;y++)cin>>A[x][y];for(x=r;x>0;x--)for(y=1;y<=x;y++)F[x][y]=MAX(F[x+1][y],F[x+1][y+1])+A[x][y];//判断该位置的路径最大值cout<<"路径最大值为:"<<F[1][1];return 0;
}
递归算法-数字三角形相关推荐
- 【蓝桥杯】 算法训练 数字三角形
历届试题 数字三角形 问题描述 在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出具体路径. 三角 ...
- C/C++ 数字三角形
数字三角形 -递归算法 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 输入格式: 第一行输入N,1≤N≤100,表示有N ...
- vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化
题目链接:https://vijos.org/p/1006 数字三角形原题看这里:http://www.cnblogs.com/huashanqingzhu/p/7326837.html 背景 在很久 ...
- codevs——1220 数字三角形(棋盘DP)
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一 ...
- 【动态规划专题】数字三角形模型
题目 算法 AcWing 1015. 摘花生 简单线性DP.数字三角形模型 AcWing 1018. 最低通行费 数字三角形模型 AcWing 1027. 方格取数 四维DP AcWing 275. ...
- 最长子序列和 动态规划python_算法基础之python实现动态规划中数字三角形和最长上升子序列问题...
数字三角形问题:python 问题描述:函数 问题分析:spa 程序代码:(递归法和动归法)code # -*- coding: utf-8 -*- """ Create ...
- [CODEVS] 2189 数字三角形W
数字三角形 要求走到最后mod 100最大 可达性DP(好像是这样叫) 用bool数组f[i][j][k]表示 位置(i,j)能否得到k(mod 100意义下) 转移条件 f[i][j][k]=f[i ...
- 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...
算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...
- hihoCoder#1037 : 数字三角形(DP)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...
最新文章
- 12. MySQL简单使用
- AgileEAS.NET平台开发实例-药店系统-准备开发环境(上)
- swift_042(Swift的typealias(别名)的用法)
- Spring boot配置文件占位符
- python对文件中的关键词查找替换,实现自动获取配置
- ACL和NAT内容整理
- Java认证授权框架Spring Security介绍
- 用带参数的方法给空数组放元素,寻找数组里面的值是否存在。
- mysql用的cap中哪两个_分布式事务CAP定理和BASE理论
- java运行python脚本_java调用python脚本,中文变成问号
- C#中使用GUID的笔记
- mysql 跨数据库联表查询
- cuda编程(一)基础
- 纯CSS实现的炫酷HOVER效果
- Windows的cmd统计文件行数
- MySQL3:连接查询、子查询及正则表达式查询
- 搞定检索式对话系统的候选response检索--使用pysolr调用Solr
- 微信有什么办法可以让加人不频繁?
- 居中问题(水平居中和垂直居中)
- [c语言+easyx]GUI界面 年会抽奖系统