博主在读《算法导论》时,看到了切钢条的自底向上的伪代码,就分享给大家

BOTTOM-UP-CUT-ROD(p,n)
1.  let r[0..n]be a new array
2.  r[0] = 0
3.  for j = 1 to n
4.      q = 负无穷
5.      for i = 1 to j
6.          q = max(q, p[i]+r[j-i])
7.      r[j] = q
8.  return r[n]

然后,博主就根据这个伪代码来用python实现

def cutRodDP(p, n):r = [0]*(n+1)r[0] = 0for j in range(1,n+1):q = float('-inf')for i in range(1,j+1):q = max(q, p[i]+r[j-i])r[j] = qreturn r[n]p = [0,1,5,8,9,10,17,17,20,24,30]
n = 3
print(cutRodDP(p,n))  # 结果是8

同时,在《算法导论》里也看到了自顶向下的伪代码,分享给大家

MEMOIZED-CUT-ROD(p,n)
1. let r[0..n]be a new array
2. for i = 0 to n
3.      r[i] = 负无穷
4. return MEMOIZED-CUT-ROD-AUX(p,n,r)MEMOIZED-CUT-ROD-AUX(p,n,r)
5. if r[n] >= 0
6.      return r[n]
7. if n == 0
8.      q = 0
9. else q = 负无穷
10.     for i = 1 to n
11.         q = max(q, p[i]+MEMOIZED-CUT-ROD-AUX(p,n-i,r))
12. r[n]=q
13. return q 

用python来实现上面的代码

def cutTopDown(p,n):r = [0]*(n+1)for i in range(0, n+1):r[i] = float('-inf')return helper(p,n,r)def helper(p,n,r):if r[n] >= 0:return r[n]q = float('-inf')if n == 0:q = 0else:q = float('-inf')for i in range(1, n+1):q = max(q, p[i] + helper(p, n - i, r))r[n] = qreturn q p = [0,1,5,8,9,10,17,17,20,24,30]
n = 3
print(cutTopDown(p,n))

获取切割方案。

伪代码:

EXTENDED-BOTTOM-UP-CUT-ROD(p,n)
1.  let r[0..n]ands[0..n]be new arrays
2.  r[0]=0
3.  for j = 1 to n
4.      q = 负无穷
5.      for i = 1 to j
6.          if q < p[i]+r[j-i]
7.              q=p[i]+r[j-i]
8.              s[j]=i
9.      r[j]=q
10. return r and sPRINT-CUT-ROD-SOLUTION(p,n)
11. (r,s)=EXTENDED-BOTTOM-UP-CUT-ROD(p,n)
12. while n>0
13.     print s[n]
14.     n=n-s[n]       

根据上面的伪代码来实现出来

def extendedBottonUp(p,n):r = [0]*(n+1)s = [0]*(n+1)r[0] = 0for j in range(1, n+1):q = float('-inf')for i in range(1, j+1):if q < p[i] + r[j-i]:q = p[i]+r[j-i]s[j]=ir[j] = qreturn r,s def printCut(p,n):(r,s) = extendedBottonUp(p,n)while n > 0:print(s[n])n = n - s[n]p = [0,1,5,8,9,10,17,17,20,24,30]
n = 4
printCut(p,n)  # 结果 2,2

看到这就麻烦点个赞或者关注来支持一下!谢谢各位~~

动态规划 - 切钢条 (python)相关推荐

  1. 算法导论15.1动态规划之钢条切割

    动态规划与钢条切割 1.分治算法与动态规划 相同点: 都是通过组合子问题的解来求解原问题 不同: 1.分治将问题划分为互不相交的子问题,递归地求解子问题,在将它们的解组合起来,求出原问题. 2.动态规 ...

  2. 算法导论-动态规划(钢条切割问题)

    写下文章来记录下自己学习算法导论的笔记 文章目录 写下文章来记录下自己学习算法导论的笔记 动态规划的目的 设计动态规划算法 钢条切割问题 问题描述 刻画问题结构(建立方程) 递归方程建立 带备忘录的自 ...

  3. 动态规划算法---钢条切割

    算法进阶---动态规划算法 钢条切割问题: 程序实现: 钢条切割问题: 程序实现: 方法一和方法二是对程序实现的不断深入,逐渐降低算法实现的时间复杂度. p = [0, 1, 5, 8, 9, 10, ...

  4. 0-1背包问题动态规划模型的Python解法

    0-1背包问题动态规划模型的Python解法 1.01背包问题 2.Python解决方案 3.01背包问题例题 1.01背包问题 背包问题(Knapsack problem)是一种组合优化的NP完全问 ...

  5. leetcode 切钢条问题

    leetcode 切钢条问题 题目描述:某公司购买了长钢条,将其切割为短钢条出售.切割工序本身没有成本支出.公司管理层希望知道最佳的切割方案.假定我们知道出售一段长为i英寸的钢条的价格为pi,钢条的长 ...

  6. 数据结构(python) —— 【34: 动态规划之钢条切割问题】

    钢条切割问题 1. 问题 某公司出售钢条,出售价格与钢条长度之间的关系如下表: 问题:现有一段长度为n的钢条和上面的价格表,求切割钢条方案,使得总收益最大. 2. 思路 思考: 长度为n的钢条的不同切 ...

  7. Python数据结构与算法-动态规划(钢条切割问题)

    一.动态规划(DP)介绍 1.从斐波那契数列看动态规划 (1)问题 斐波那契数列递推式: 练习:使用递归和非递归的方法来求解斐波那契数列的第n项 (2)递归方法的代码实现 import time # ...

  8. 动态规划(钢条切割问题 Java/Python/Golang)

    问题描述(引用算法导论描述):给定一段长度为n英寸的钢条(一个整型)和一个价格表p(一个数组)求钢条最优切割方案,使得销售的收益最大,如果n英寸的钢条的价格p[n]足够大,那么钢条有可能不需要切割 J ...

  9. 《算法导论》学习(十七)----动态规划之钢条切割(C语言)

    文章目录 前言 一.钢条切割问题 1.问题背景 2.问题描述 3.问题的难点 (1)情况较多 (2)消除重复子问题 二.问题解决方案 1.问题的特点 (1)最优化子结构 (2)重复子问题 2.最优化解 ...

最新文章

  1. 简易django项目之登录验证
  2. DirectFB编译环境
  3. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)
  4. NYOJ 641 摧毁网络
  5. StoryBoard之User Defined Runtime Attributes的使用
  6. iso图像测试卡_4700万像素 五轴防抖 徕卡正式发布SL2无反相机
  7. 【非科班告诉你】前端自学从小白到入门
  8. 编译技术算符优先分析课设c++_2020年河北省专接本理工类计算机科学与技术软件工程专业考试大纲...
  9. FFmpeg简介及常见用法
  10. VS2005 添加lib 的方法
  11. php圆角的度数计算公式,弧度和角度的换算器(度数换算计算器)
  12. 如何不用ps来吸取颜色并将颜色一键插入到网页,自动生成代码?
  13. 【微信小程序】数据绑定
  14. win10查看计算机管理员,肿么查看win10微软账户是否为管理员账户
  15. OpenCV之Vec3f
  16. MarkDown CheatSheet 速查表
  17. android 高德地图范围圆圈公里_根据坐标点显示地图显示范围(高德地图)
  18. 滴滴老年版来了,推出一键打车小程序,电话叫车服务
  19. php 感叹号有什么用,感叹号!代表什么意思?(标点符号的用法之感叹号)
  20. 男程序员用双手虐了多少女明星?

热门文章

  1. H5制作视频网页的架构
  2. 基于Python实现并测试Modularity算法
  3. python读取文本两个数字的成语_只要2步!将搜狗词库(scel)转为Python可读的文本...
  4. 发布本人整理的面试问题大全,为准备找工作的同行们尽一份力 希望大家多补充或回答
  5. 如何解决条码打印机隔张打印问题
  6. turtle更多函数 难度0
  7. 美团跑腿地址选择器流程图[小程序]
  8. AMD,在竞争中蜕变!
  9. Flash鼠绘教程:临摹徐悲鸿的骏马图
  10. Autosar MCAL-SPI配置及使用