输入格式:

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

数字三角形_递归_递推(动态规划)相关推荐

  1. 递归、递推、贪心、搜索和动态规划

    文章目录 递归与递推 动态规划与递归 贪心算法与动态规划 知乎关于动态规划问题的一个问答总结! 参考文献 递归与递推 递归:函数调用自身,直到达到基线条件之后,再一层层的回归到最初的问题.这是一种自顶 ...

  2. 递归,递推,记忆化搜索,空间优化(数字三角形)

    题目链接:http://poj.org/problem?id=1163 1.递归思想:第一层到最底层的最优路径可以分解为:第一层到第二层来,再加上第二层的最优路径 状态: Time Limit Exc ...

  3. 贪心、递归、递推以及动态规划算法的分析与对比

    PS:   头一次规规矩矩的按照论文的格式写文章,呵呵.虽然是小儿科的不能再小儿科的东西了..不过..也忽悠了6000多字~~嘿嘿..肯定写的不好,第一次嘛..所以..接受大家一切批评哈!...文章N ...

  4. 递归与递推 普通排队问题及带约束条件的排队问题 c代码

    先看下题目: 电影院买票排队,票价50,排队的人中携带50元的有20个人,携带100的有10个人,售票处开始时没有余额, 问最多有多少种排队方式使得售票处能够找的开(携带相同数额的人交换位置算一种排队 ...

  5. 2.3 基本算法之递归变递推 1188 菲波那契数列(2) python

    http://noi.openjudge.cn/ch0203/1760/ """2.3 基本算法之递归变递推 1188 菲波那契数列(2)--3分 http://ybt. ...

  6. 算法——递归与递推[蓝桥杯]

    文章目录 递归与递推 递归实现(指数型)枚举 递归实现(排列型)枚举 递归实现(组合型)枚举 补充:DFS的优化-剪枝 递归与递推 递归就是自己调用自己. printf和scanf的速度比cin和co ...

  7. YBT进阶一年游P1 递归与递推

    YBT进阶一年游P1 递归与递推 这一系列的题都来自于ybt高效进阶,相当有难度,所以以后尽可能坚持每一部分的题都写一篇博客进行总结.本人水平很一般,能力很有限,故解法和写法不一定(应该说是一定不)最 ...

  8. 递归与递推 输出斐波拉契数列的前n项 python

    输出斐波拉契数列的前n项 python 递归与递推 文章目录 输出斐波拉契数列的前n项 python 题设 题解 题设 以下数列 0 1 1 2 3 5 8 13 21 - 被称为斐波纳契数列. 这个 ...

  9. 【算法反刍】递归与递推

    对于递归和递推的非常专业的定义和解释在这里就不再copy了,私以为算法的关键是运用和实践,就好比围棋,规则简单但是入门的门槛很高,就算熟练记忆规则也没法下好一盘棋.Likewise,对于算法学习,最关 ...

  10. AcWing 蓝桥杯AB组辅导课 01、递归与递推

    文章目录 前言 一.递归 知识点 例题 题目1:AcWing 95.斐波那契数列[简单,递归写法] 题目2:AcWing 92.递归实现指数型枚举[简单] 题目3:AcWing 94.递归实现排列型枚 ...

最新文章

  1. 吴恩达神经网络和深度学习——第二周笔记
  2. u-boot2011.09 u-boot.img 的流程跟踪
  3. HTML5实践 -- 使用css装饰你的图片画廊 - part2
  4. mybatis对mysql if函数_Mybatis使用mysql函数if出现错误
  5. fwink函数c语言,wink: Wink is oscstudio library
  6. ArcGIS实现在线与线交叉处打断线(批量)
  7. 为什么jupyterlab运行程序的时候会自动停止_气象人的JupyterLab
  8. Effective Java 电子书 apk版本下载
  9. oftc注册服务器占用,golang服务器程序运行过程中崩溃,报错:fatal error: runtime: out of memory...
  10. LIB和DLL的区别与使用
  11. java编写两邮件传输,JAVA邮件发送(文字+图片+附件)【源码】
  12. MySQL计算两个日期相差的天数、月数、年数
  13. 一文讲透高速缓存原理
  14. 【自学Flutter】3.2 图片的填充样式
  15. nfcwriter下载 ios_iOS、iPadOS、macOS开启公测
  16. SSH所选用户密钥为在远程主机上注册。请再试一次
  17. 海贼王---追了好久的动漫了闲来无事发几张图嘿嘿
  18. 删除vSphere中DataStore(inactive)非活动存储
  19. 媒介查询_2016年最主要的网络攻击媒介
  20. C# Winform控件库分享,免费开源,支持中文!(附DLL及教程)

热门文章

  1. 北京发布人工智能产业政策,该如何高效关注行业动态、把握新机遇?
  2. 超强干货!AI、Python、机器学习课程免费学,请尽快领取!
  3. 照片解锁手机不能忍?教你用OpenCV做活体检测 | 有代码
  4. 英特尔AIDC2018:神经计算棒二代从天而降,软硬生态合作圈尽露锋芒
  5. 百度推出完全端到端的并行音频波形生成模型,比WaveNet快千倍 | 论文
  6. 马斯克自曝特斯拉渣产能原因:我错了,过分信任自动化机器人
  7. 特斯拉Model X撞高速中央隔离带起火,司机受伤身亡
  8. 独家 | 滴滴的无人车野心
  9. 亚马逊全面发力AI,推机器学习托管服务、四项新工具,还有AI硬件
  10. 创建LEANGOO账号