数字三角形

给定一个由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;
}

递归算法-数字三角形相关推荐

  1. 【蓝桥杯】 算法训练 数字三角形

    历届试题 数字三角形 问题描述 在下面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大.路径上的每一步都只能往左下或 右下走.只需要求出这个最大和即可,不必给出具体路径. 三角 ...

  2. C/C++ 数字三角形

    数字三角形 -递归算法 给定一个由n行数字组成的数字三角形如下图所示.试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. 输入格式: 第一行输入N,1≤N≤100,表示有N ...

  3. vijos 1006 晴天小猪历险记之Hill——数字三角形的终极变化

    题目链接:https://vijos.org/p/1006 数字三角形原题看这里:http://www.cnblogs.com/huashanqingzhu/p/7326837.html 背景 在很久 ...

  4. codevs——1220 数字三角形(棋盘DP)

     时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 如图所示的数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一 ...

  5. 【动态规划专题】数字三角形模型

    题目 算法 AcWing 1015. 摘花生 简单线性DP.数字三角形模型 AcWing 1018. 最低通行费 数字三角形模型 AcWing 1027. 方格取数 四维DP AcWing 275. ...

  6. 最长子序列和 动态规划python_算法基础之python实现动态规划中数字三角形和最长上升子序列问题...

    数字三角形问题:python 问题描述:函数 问题分析:spa 程序代码:(递归法和动归法)code # -*- coding: utf-8 -*- """ Create ...

  7. [CODEVS] 2189 数字三角形W

    数字三角形 要求走到最后mod 100最大 可达性DP(好像是这样叫) 用bool数组f[i][j][k]表示 位置(i,j)能否得到k(mod 100意义下) 转移条件 f[i][j][k]=f[i ...

  8. 数字三角形路径最小值c语言题目,算法学习——动态规划之点数值三角形的最小路径...

    算法描述在一个n行的点数值三角形中,寻找从顶点开始每一步可沿着左斜或者右斜向下直到到达底端,使得每个点上的数值之和为最小 右图为一个4行的点数值三角形 算法思路接收用户输入行数n 使用一个二维数组a[ ...

  9. hihoCoder#1037 : 数字三角形(DP)

    [题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 问题描写叙述 小Hi和小Ho在经历了螃蟹先生的任务之后被奖励了一次出国旅游的机会,于是他 ...

最新文章

  1. 12. MySQL简单使用
  2. AgileEAS.NET平台开发实例-药店系统-准备开发环境(上)
  3. swift_042(Swift的typealias(别名)的用法)
  4. Spring boot配置文件占位符
  5. python对文件中的关键词查找替换,实现自动获取配置
  6. ACL和NAT内容整理
  7. Java认证授权框架Spring Security介绍
  8. 用带参数的方法给空数组放元素,寻找数组里面的值是否存在。
  9. mysql用的cap中哪两个_分布式事务CAP定理和BASE理论
  10. java运行python脚本_java调用python脚本,中文变成问号
  11. C#中使用GUID的笔记
  12. mysql 跨数据库联表查询
  13. cuda编程(一)基础
  14. 纯CSS实现的炫酷HOVER效果
  15. Windows的cmd统计文件行数
  16. MySQL3:连接查询、子查询及正则表达式查询
  17. 搞定检索式对话系统的候选response检索--使用pysolr调用Solr
  18. 微信有什么办法可以让加人不频繁?
  19. 居中问题(水平居中和垂直居中)
  20. [c语言+easyx]GUI界面 年会抽奖系统

热门文章

  1. 如何取消WPS的弹窗广告
  2. Windows 2012 R2 windows update一直“正在检查更新“不动解决方法
  3. C语言实现十六进制转换为十进制的方法
  4. Unicode字符编码表(转)
  5. PPT干货:微信公众号的基础建设与规划入门手册
  6. 6. 邵婷 校展示课二年级上册《数学广角-- 简单的排列 》照片
  7. 面向对象与面向过程小结
  8. Node.js 的安装与配置教程
  9. Windows下快速部署PHP开发环境
  10. 搭建kafka消息队列服务