描述

给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。

如果你只用额外空间复杂度O(n)的条件下完成可以获得加分,其中n是数字三角形的总行数。

您在真实的面试中是否遇到过这个题?  是

样例

比如,给出下列数字三角形:

[[2],[3,4],[6,5,7],[4,1,8,3]
]

从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。

兄弟们,今天我们就正式进入动态规划的环节了,动态规划很有意思,也很难,今天就简单介绍下思路。

我们在碰到一个题目的时候,首先要思考,这一题要用动态规划吗?

动态规划适用的三个场景:

1、求最大值最小值

2、判断是否可行

3、统计方案个数

动态规划不适用的三个场景:

1、求出所有具体方案而非方案个数

2、输入数据时一个集合(无序),而不是一个序列(有序)。

3、暴力算法的时间复杂度已经是多项式级别。动态规划擅长优化指数级别复杂度(2^n,n!)到多项式级别复杂度(n^2,n^3),不擅长优化从n^3到n^2。

那么动态规划的思路是什么呢?主要分四步:

1、状态 state

灵感,创造力,存储小规模问题的结果

2、方程 function

状态之间的联系,怎么通过小的状态,来算大的状态

3、初始化 initialization

最极限的小状态是什么,起点

4、答案 answer

最大的那个状态是什么,终点

OK,说完了动态规划,我们来看这一题。这一题很明显是动态规划每一个条件都符合,当然用dfs也可以做,但是如果用dfs做的话,时间复杂度是2^n。

这一题的思路是如何?对于一个结点来说,它的前序结点一定是它上一行的左边或者右边,要想让到这个结点的路径最小,那么到它的前序结点的路径也一定是最小的。

那么递推式已经出来了:每个结点的最短路径=min(左父结点最短路径,右父节点最短路径)+该结点本身权重

具体看代码,我注释写得很详细了:

class Solution:"""@param triangle: a list of lists of integers@return: An integer, minimum path sum"""def minimumTotal(self, triangle):# write your code hereif (len(triangle)==0 or triangle==None):return 0dp=[]for i in range(len(triangle)):temp = []for j in range(len(triangle[i])):temp.append(0)dp.append(temp)dp[0][0]=triangle[0][0]# dp数组中存的是每个坐标从顶往下的最短路径# 每个数字的前一条路,要么从左上来,要么从右上来# 左上坐标为row-1,column-1# 右上坐标为row-1,column# 每行第一列没有左上,只有右上for j in range(1,len(triangle)):dp[j][0]=dp[j-1][0]+triangle[j][0]# 每行最后一列没有右上,只有左上for j in range(1,len(triangle)):dp[j][-1]=dp[j-1][-1]+triangle[j][-1]for i in range(1,len(triangle)):for j in range(1,len(triangle[i])-1):# 存最短路径:每个坐标的最短路径=其前序结点的最短路径+该结点本身dp[i][j]=min(dp[i-1][j-1],dp[i-1][j])+triangle[i][j]#找出最后一行中最小的length=len(triangle)-1minnum=99999999for i in  range(len(dp[length])):if(dp[length][i]<minnum):minnum=dp[length][i]return minnums=Solution()
print(s.minimumTotal([[2],[3,4],[6,5,7],[4,1,8,3]
]))

python--lintcode109.数字三角形(动态规划)相关推荐

  1. 【蓝桥杯】【python】数字三角形

    问题描述 虽然我前后用了三种做法,但是我发现只有"优化思路_1"可以通过蓝桥杯官网中的测评,但是如果用c/c++的话,每个都通得过,足以可见python的效率之低(但耐不住人家好用 ...

  2. 使用python打印数字三角形_11届省赛python试题 H: 数字三角形

    试题 H: 数字三角形 [问题描述] 上图给出了一个数字三角形.从三角形的顶部到底部有很多条不同的路径.对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最 大的和. 路径上的每一步只 ...

  3. C++ 数字三角形(动态规划)

    一.题目 有三种方法实现: 这里就求权值之和最大的,最小的类似就不分析了. 1.自底向上  缺点:算法复杂,重复计算 2.自顶向下  缺点:重复计算,浪费时间 3.动态规划 思路和自底向上.自顶向下一 ...

  4. poj1163数字三角形动态规划

    很有意思的一题,递推动态规划,拿到这道题首先我们要想到开一个二维数组存这个三角形,然后我们发现如果这个三角形只有一层的话,到最底层的路线的长度和不就是自己本身么,然后从下向上走, 我们定义maxsum ...

  5. poj1163 数字三角形 (动态规划)

    试题链接:http://poj.org/problem?id=1163 1.记忆递归型(自顶向下) D[i][j]来存数字 典型的递归问题:D(r,j)出发,下一步只能走D(r+1,j)或者D(r+1 ...

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

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

  7. 【算法】【动态规划篇】第3节:数字三角形问题

    本期任务:介绍算法中关于动态规划思想的几个经典问题 [算法][动态规划篇]第1节:0-1背包问题 [算法][动态规划篇]第2节:数字矩阵问题 [算法][动态规划篇]第3节:数字三角形问题 [算法][动 ...

  8. C++/python描述 898. 数字三角形 (四种实现方法)

    C++/python描述 898. 数字三角形 (四种实现方法)   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在CSDN中写 ...

  9. C++数字三角形问题(动态规划)

    一.问题描述 ★问题描述:给字一个由n行数字组成的数字三角形(等腰三角形).试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大. ★算法设计:对于给定的由n行数字组成的数字三 ...

  10. 数字三角形 计算最大路径 动态规划

    以所经过的权值之和最大值为例进行说明. 行进的过程中,每次只有两种选择:向左或向右.一个有n层的数字三角形的完整路径有2n条,所以当n比较大的时候,搜索全部路径,从中找出最大值,效率较低. 采用动态规 ...

最新文章

  1. android 系统锁屏音乐播放器,Android实现音乐播放器锁屏页
  2. div样式调整.txt
  3. Spring常见注解
  4. nyoj1237 最大岛屿(河南省第八届acm程序设计大赛)
  5. SQL Server 2008 BIDS组件的安装
  6. unshift() 方法将一个或多个元素添加到数组的开头,并返回新数组的长度
  7. STM32之通用定时器输入捕获模式
  8. 仿iphone触屏手机界面
  9. python keystone_keystone命令与client接口学习
  10. ec2 web mysql_AWS之EC2实例搭建LAMP服务器
  11. cartographer代码流程分析
  12. Git 操作实战示例
  13. android开源库汇总
  14. it论坛 计算机科学概论,(毕业论文) 计算机科学与技术专业 IT技术论坛.doc
  15. 企业邮箱的好处有哪些?企业邮箱使用场景
  16. 如何提高自己的学习能力(JAVA篇)
  17. 计算机光驱运行功能,电脑如何设置光驱位第一启动项
  18. elasticsearch7.8.0入门操作
  19. 26种英语形容词后缀讲解
  20. PYTHON TIME() 实现进度条方法

热门文章

  1. [C语言][数据存储+指针进阶]关关难过关关过 迈向光明之路 而我义无反顾 冲
  2. Ajax(jQuery封装),表单form提交(Ajax),art-template模板引擎,原生Ajax,XML和JSON,axios,跨域和JSONP,防抖和节流,HTTP协议
  3. 直播平台软件开发的前端如何实现整套视频直播技术流程
  4. 【RocketMQ】 官方运维管理命令mqadmin使用手册(讲解+实操)
  5. C++声明指向数组的指针
  6. 高级架构师_Redis_第1章_缓存原理与设计
  7. [RaspberryPi] 一键部署树莓派Zero电子相框功能!
  8. 50岁学计算机后往哪方面发展,50岁的人,学点什么技术可为以后养老打点基础?看完明白了...
  9. 打开时空隧道,重演云栖72小时云世界
  10. linux securefx 传输文件失败,sftp客户端securefx登录失败