数字三角形_递归_递推(动态规划)
输入格式:
5 // 三角形行数,下面是三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
三角形的行数大于1小于等于100,数字为 0 – 99。
要求输出最大和,不必给出具体路径。
思路
- D(r,j):第r行第j个数字(r,j从1开始算)
- MaxSum(r,j):从D(r,j)到底边的各条路径中,最佳路径的数字之和
问题:求MaxSum(1,1)
D(r,j)出发,下一步只能走D(r+1,j)或者D(r+1,j+1)
对于N行的三角形:
if(r == N)MaxSum(r,j) = D(r,j)
elseMaxSum(r,j) = Max{ MaxSum(r+1,j), MaxSum(r+1,j+1) } + D(r,j)
递归
#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;int D[MAX][MAX];
int n;int MaxSum(int i, int j) {if(i == n)return D[i][j];int x = MaxSum(i+1,j);int y = MaxSum(i+1,j+1);return max(x,y) + D[i][j];
}int main(){cin>>n;for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)cin>>D[i][j];cout<< MaxSum(1,1) <<endl;return 0;
}
改进
每算出一个MaxSum(r,j)就保存起来,下次用到其值的时候直接取用,则可免去重复计算。
记忆递归型动态规划
#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;int D[MAX][MAX];
int n;
int maxSum[MAX][MAX];int MaxSum(int i, int j) {if(maxSum[i][j] != -1)return maxSum[i][j];if(i == n)maxSum[i][j] = D[i][j];else {int x = MaxSum(i+1,j);int y = MaxSum(i+1,j+1);maxSum[i][j] = max(x,y) + D[i][j];}return maxSum[i][j];
}int main() {cin>>n;for(int i=1; i<=n; i++)for(int j=1; j<=i; j++) {cin>>D[i][j];maxSum[i][j] = -1;}cout<< MaxSum(1,1) <<endl;return 0;
}
30 | ||||
---|---|---|---|---|
23 | 21 | |||
20 | 13 | 10 | ||
7 | 12 | 10 | 10 | |
4 | 5 | 2 | 6 | 5 |
递推型动态规划
#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;int D[MAX][MAX];
int n;
int maxSum[MAX][MAX];int main() {
cin>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=i; j++)
cin>>D[i][j];
for(int i=1; i<=n; i++)
maxSum[n][i] = D[n][i];
for(int i=n-1; i>=1; i--)
for(int j=1; j<=i; j++)
maxSum[i][j] = max(maxSum[i+1][j],maxSum[i+1][j+1]) + D[i][j];
cout<<maxSum[1][1]<<endl;
}
空间优化动态规划
用D的第n行替代maxSum
#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;int D[MAX][MAX];
int n;
int *maxSum;int main() {cin>>n;for(int i=1; i<=n; i++)for(int j=1; j<=i; j++)cin>>D[i][j];maxSum = D[n]; // maxSum指向第n行for(int i=n-1; i>=1; i--)for(int j=1; j<=i; j++)maxSum[j] = max(maxSum[j], maxSum[j+1]) + D[i][j];cout<<maxSum[1]<<endl;return 0;
}
北大的公开课真心不错,感觉比现在上的算法课好很多(●’◡’●)
转载于:https://www.cnblogs.com/Genesis2018/p/9079806.html
数字三角形_递归_递推(动态规划)相关推荐
- 递归、递推、贪心、搜索和动态规划
文章目录 递归与递推 动态规划与递归 贪心算法与动态规划 知乎关于动态规划问题的一个问答总结! 参考文献 递归与递推 递归:函数调用自身,直到达到基线条件之后,再一层层的回归到最初的问题.这是一种自顶 ...
- 递归,递推,记忆化搜索,空间优化(数字三角形)
题目链接:http://poj.org/problem?id=1163 1.递归思想:第一层到最底层的最优路径可以分解为:第一层到第二层来,再加上第二层的最优路径 状态: Time Limit Exc ...
- 贪心、递归、递推以及动态规划算法的分析与对比
PS: 头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...
- 递归与递推 普通排队问题及带约束条件的排队问题 c代码
先看下题目: 电影院买票排队,票价50,排队的人中携带50元的有20个人,携带100的有10个人,售票处开始时没有余额, 问最多有多少种排队方式使得售票处能够找的开(携带相同数额的人交换位置算一种排队 ...
- 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python
http://noi.openjudge.cn/ch0203/1760/ """2.3 基本算法之递归变递推 1188 菲波那契数列(2)--3分 http://ybt. ...
- 算法——递归与递推[蓝桥杯]
文章目录 递归与递推 递归实现(指数型)枚举 递归实现(排列型)枚举 递归实现(组合型)枚举 补充:DFS的优化-剪枝 递归与递推 递归就是自己调用自己. printf和scanf的速度比cin和co ...
- YBT进阶一年游P1 递归与递推
YBT进阶一年游P1 递归与递推 这一系列的题都来自于ybt高效进阶,相当有难度,所以以后尽可能坚持每一部分的题都写一篇博客进行总结.本人水平很一般,能力很有限,故解法和写法不一定(应该说是一定不)最 ...
- 递归与递推 输出斐波拉契数列的前n项 python
输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...
- 【算法反刍】递归与递推
对于递归和递推的非常专业的定义和解释在这里就不再copy了,私以为算法的关键是运用和实践,就好比围棋,规则简单但是入门的门槛很高,就算熟练记忆规则也没法下好一盘棋.Likewise,对于算法学习,最关 ...
- AcWing 蓝桥杯AB组辅导课 01、递归与递推
文章目录 前言 一.递归 知识点 例题 题目1:AcWing 95.斐波那契数列[简单,递归写法] 题目2:AcWing 92.递归实现指数型枚举[简单] 题目3:AcWing 94.递归实现排列型枚 ...
最新文章
- 吴恩达神经网络和深度学习——第二周笔记
- u-boot2011.09 u-boot.img 的流程跟踪
- HTML5实践 -- 使用css装饰你的图片画廊 - part2
- mybatis对mysql if函数_Mybatis使用mysql函数if出现错误
- fwink函数c语言,wink: Wink is oscstudio library
- ArcGIS实现在线与线交叉处打断线(批量)
- 为什么jupyterlab运行程序的时候会自动停止_气象人的JupyterLab
- Effective Java 电子书 apk版本下载
- oftc注册服务器占用,golang服务器程序运行过程中崩溃,报错:fatal error: runtime: out of memory...
- LIB和DLL的区别与使用
- java编写两邮件传输,JAVA邮件发送(文字+图片+附件)【源码】
- MySQL计算两个日期相差的天数、月数、年数
- 一文讲透高速缓存原理
- 【自学Flutter】3.2 图片的填充样式
- nfcwriter下载 ios_iOS、iPadOS、macOS开启公测
- SSH所选用户密钥为在远程主机上注册。请再试一次
- 海贼王---追了好久的动漫了闲来无事发几张图嘿嘿
- 删除vSphere中DataStore(inactive)非活动存储
- 媒介查询_2016年最主要的网络攻击媒介
- C# Winform控件库分享,免费开源,支持中文!(附DLL及教程)