文章目录

  • 1. 问题描述
  • 2. DP算法代码
  • 3. LeetCode 120 三角形最小路径和

1. 问题描述

对“杨辉三角"进行一些改造。每个位置的数字可以随意填写,经过某个数字只能到达下面一层相邻的两个数字。
假设你站在第一层,往下移动,我们把移动到最底层所经过的所有数字之和,定义为路径的长度。请你编程求出从最高层移动到最底层的最短路径。

2. DP算法代码

/*** @description: 改造的杨辉三角,从顶层下来的最小和* @author: michael ming* @date: 2019/7/17 23:03* @modified by: */
#include <cstring>
#include <algorithm>
#include <iostream>using namespace std;
const int high = 5;
int YHTriangle[high][high] = {{5},{7,8},{2,1,4},{4,2,6,1},{2,7,3,4,5}};void shortestPath()
{int states[high][high];//存放路径距离(存较小的)
//    memset(states,65535,high*high*sizeof(int));states[0][0] = YHTriangle[0][0];//第一个点的距离int i, j;for(i = 1; i < high; ++i)//动态规划{for(j = 0; j <= i; ++j){if(j == 0)//在两边,上一个状态没得选,只有一个states[i][j] = states[i-1][j]+YHTriangle[i][j];else if(j == i)//在两边,上一个状态没得选,只有一个states[i][j] = states[i-1][j-1]+YHTriangle[i][j];else//在中间,上一个状态有两个,选路径短的states[i][j] = min(states[i-1][j],states[i-1][j-1])+YHTriangle[i][j];}}int mins = 65535, idx;for(j = 0; j < high; ++j){if(mins > states[high-1][j]){mins = states[high-1][j];//选出最短的idx = j;//记录最短的路径位置}}cout << "最短的路径是:" << mins << endl;//-----------打印路径-----------------------cout << "从底向上走过的点的值是:" << endl;cout << YHTriangle[high-1][idx] << " ";for(i = high-1,j = idx; i > 0; --i){if(j == 0)cout << YHTriangle[i-1][j] << " ";else if(j == i){cout << YHTriangle[i-1][j-1] << " ";j--;}else{if(states[i-1][j-1] < states[i-1][j]){cout << YHTriangle[i-1][j-1] << " ";j--;}elsecout << YHTriangle[i-1][j] << " ";}}
}
int main()
{shortestPath();return 0;
}


更改数据再测试

3. LeetCode 120 三角形最小路径和

https://leetcode-cn.com/problems/triangle/

以下解法是O(n)空间复杂度

class Solution
{public:int minimumTotal(vector<vector<int>>& triangle) {int n = triangle.size();int states[n];int temp_states[n];states[0] = triangle[0][0];int i, j, k, minsum = INT_MAX;for (i = 1; i < n; i++){for(j = 0; j < i+1; j++){if(j == 0)temp_states[0] = states[0] + triangle[i][j];else if(j == i)temp_states[j] = states[j-1] + triangle[i][j];elsetemp_states[j] = min(states[j-1], states[j]) + triangle[i][j];}for(k = 0; k < i+1; k++)states[k] = temp_states[k];//更新states}for(j = 0; j < n; j++)//求最小的值{if(states[j] < minsum)minsum = states[j];}return minsum;}
};

动态规划应用--“杨辉三角”最短路径 LeetCode 120相关推荐

  1. 曾经vb,c ,c++,python,写过的杨辉三角,致敬杨老前辈

    // 杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列.杨辉三角形同时对应于二项式定理的系数. 直角三角形杨辉三角 //c语言,求直角的 #include<stdi ...

  2. leetcode 119. 杨辉三角 II

    题目 思路 根据上一题题解:leetcode 118. 杨辉三角 本题直接取第 i 行返回就可以了 题解 1.续上一题(118题)的解法,上一题的代码直接拿来用了 import java.util.A ...

  3. python杨辉三角_yiduobo的每日leetcode 118.杨辉三角 amp;amp; 119.杨辉三角II

    祖传的手艺不想丢了,所以按顺序写一个leetcode的题解.计划每日两题,争取不卡题吧. 118.杨辉三角https://leetcode-cn.com/problems/pascals-triang ...

  4. LeetCode简单题之杨辉三角 II

    题目 给定一个非负索引 rowIndex,返回「杨辉三角」的第 rowIndex 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: rowIndex = 3 输出: [1 ...

  5. LeetCode简单题之杨辉三角

    题目 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行. 在「杨辉三角」中,每个数是它左上方和右上方的数的和. 示例 1: 输入: numRows = 5 输出: [[1], ...

  6. Fibonacci数列 递归 杨辉三角 动态规划

    这篇帖子主要是介绍 递归 与 动态规划 之间是如何转换的, 什么是递归估计不用多说,那么什么是 动态规划呢? 我理解的动态规划就是: 能够避免 直接 递归实现 中出现的重复运算的技术就是动态规划. 这 ...

  7. leetcode 打印_LeetCode第118号问题:杨辉三角

    本文首发于公众号「五分钟学算法」,是图解 LeetCode 系列文章之一. 个人网站:https://www.cxyxiaowu.com 杨辉三角应该是大家很早就接触到的一个数学知识,它有很多有趣的性 ...

  8. 51nod 1118 机器人走方格 解题思路:动态规划 1119 机器人走方格 V2 解题思路:根据杨辉三角转化问题为组合数和求逆元问题

    51nod 1118 机器人走方格: 思路:这是一道简单题,很容易就看出用动态规划扫一遍就可以得到结果, 时间复杂度O(m*n).运算量1000*1000 = 1000000,很明显不会超时. 递推式 ...

  9. leetcode数组汇总_LeetCode刷题实战118:杨辉三角

    算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试.所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !今天和大家聊 ...

最新文章

  1. linux内核链表使用例,linux内核链表的使用例子
  2. 五大理由从Python转到Go语言
  3. java椭圆写字距离_保持轨道椭圆的距离
  4. char几个字节java_java中的char占几个字节实例分析
  5. 采购申请不固定供应商怎么破?
  6. 【SICP练习】127 练习3.58
  7. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1041:奇偶数判断
  8. UnityShader30:预编译指令multi_complie和shader_feature
  9. jquery实现上下左右键盘监听_初识 jquery.simulate.js 模拟键盘事件
  10. dnf服务器运行库,游戏运行库|3DM游戏必备运行库合集安装包(史上最全) V3.0
  11. 获CNNVD感谢信!知道创宇以专业漏洞研究能力支撑“漏洞通报”业务
  12. SetTimer函数和 KillTimer函数
  13. dell服务器进系统失败,如何解决Dell服务器系统开机提示错误
  14. slic3r prusaslicer编译
  15. 1 1 2 3 5 8 java_【Java】一个斐波那契数列是由数字1、1、2、3、5、8、13、21、34等等组成的,其中每一个数字(从第三个数字起)都是前两个数字的和。...
  16. MyBatis-plus拦截器
  17. 广州地区常用的DNS解析服务器
  18. ognl表达式中%{}的作用
  19. 程序员到底有多累、多辛苦?
  20. Indy IdTcpserver

热门文章

  1. 全国计算机vb考试经典程序设计,全国计算机二级《VB语言程序设计》考试要点...
  2. linux pmap was java,jvm 《九》pmap linux 命令介绍 及使用
  3. kali linux 2.0 ssh,Kali 2.0使用SSH进行远程登录(示例代码)
  4. Win7系统中用anaconda配置tensorflow运行环境
  5. linux的几个文本内容查看命令小结
  6. linux-0.11内核 调试教程+GCC源代码
  7. 多线程篇-NSThread-简单使用
  8. [转]java 组播
  9. 小米12比我的小米10还便宜
  10. 利用C语言中的setjmp和longjmp,来实现异常捕获和协程