动态规划问题——钢筋切割问题的两种解法解析@TOC

钢筋切割问题:

对于这个问题的两种解法

先来个官方点的解法说明:

我对两种解法的个人理解

第一种解法:
这种解法就是把先钢筋分成两部分,分别记为 i 和(n - i),这时候我们并不知道 i 和(n - i)各自的最优解是多少呀,那该怎么办?很简单,这时再把 i 和(n - i)看做成两条完全独立的钢筋,像一开始那样把它俩各自再次分成两部分…这样,到了最后,肯定会回归到1英寸钢筋的最优解是啥,这时候显而易见啦!(这种解法很容易理解,不懂的琢磨下,加油)

第二种解法:
这个解法我一开始是怎么也看不懂呀,后来想了几乎一个多小时才豁然开朗。话不多说,这就说下我的理解:
这个解法的意思就是,我把钢筋砍成两段,左边那段不管它(直接卖出去),右边那边做点小心思,求出最优解,再卖出去。我一开始的疑问就是:左边那段不求最优解?!那最后的结果是左右合并呀,左边都不是最优解,结果怎么可能是!后来仔细研究了一下别人的代码,才发现我太naive了!(贴上别人的代码哈)

(注意红色箭头这一行代码)
我觉得用一个实例来解释会更加明白:
我要切一条10英寸的钢筋了哈,
step 1:
我先把这条钢筋切成左边3英寸,右边7英寸(我假设,假设哈!这时候左3右7是最优的,即最终最优的切法是3+x+y+…+z=10,其中x+y+…+z=7。不接受任何反驳哈,因为是假设)。但是,虽然这时的切法是最优解,但我不知道右边的7寸的钢筋在最优的时候的切法是如何的呀。没关系,咱们再来对右边7寸的钢筋搞事情。
step 2:
我再把原来7寸的钢筋切成左边2英寸,右边5英寸,哈哈,这里又要假设啦(这时候左2右5是最优的,即最终最优的切法是2+x+y+…+z=7,其中x+y+…+z=5)。但是,这时候我们又遇见麻烦了,不知道右边5英寸的钢筋的最优切法是啥呀!没法子,再切呗。这样一直重复重复(对应于代码,就是红色箭头指出的递归)…
最后,这条10英寸的钢筋的最优切法就能得出来:3+2+?+?+?+…=10
对应于上面的代码,“ p[i-1]+cut(p, n-i) ”这段代码就是不断切割右边钢筋的过程。而代码里的for循环的作用就是用来找出每次把钢筋切成左右两部分时,怎么切才是最优的(对应于我上面假设的那部分,我step 1假设的是左3右7是最优的嘛,但实际情况可能不是哟,所以要每种分法(把钢筋分成左右两部分)都试一下,比如说:左1右9呀,左2右8呀,左7右3呀(注意左7右3和左3右7是不一样的呦)等等,所以要用到一个for循环)。

动态规划——钢筋切割问题的两种解法解析相关推荐

  1. usaco Ordered Fractions 顺序的分数(两种解法)

    这题很好玩,这里有两种解法. 第一种我自己写的,先找到所有的既约真分数,然后写了一个cmp函数进行排序最后输出.我写的时候还在想这章不是搜索吗这跟搜索关系不大吧,难道是怕我们思维定式化故意出的题不是搜 ...

  2. 约瑟夫环问题的两种解法(详解)

    约瑟夫环问题的两种解法(详解) 题目: Josephus有过的故事:39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓.于是决定了自杀方式,41个人排成一个圆 ...

  3. 牛客--追债之旅 两种解法

    文章目录 第一种 第二种: 一共两种解法,所以即便你不会最短路,也可以做,甚至爆搜+剪枝的时间和空间消耗小于最短路做法. 第一种 题意: 小明现在要追讨一笔债务,已知有n座城市,每个城市都有编号,城市 ...

  4. leetcode 73 矩阵置零 C++ 两种解法

    leetcode 73 两种解法~~,没有一个是我想出来的,哈哈~~ one class Solution {public:void setZeroes(vector<vector<int ...

  5. 北林oj-算法设计与分析-Line up in the canteen(两种解法,附思路)

    描述 One day, there is a kind of new delicious food from one of the windows in the canteen. All studen ...

  6. 洛谷——P1597 语句解析(两种解法)

    P1597 语句解析(两种解法) 题目背景 木有背景-- 题目描述 一串长度不超过 255 的 PASCAL 语言代码,只有 a,b,c 3 个变量,而且只有赋值语句,赋值只能是一个一位的数字或一个变 ...

  7. 整数拆分的两种解法(已完成)

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 整数拆分 ...

  8. Leetcode 855. Exam Room 考场就座:提供两种解法

    Leetcode 855. Exam Room 考场就座: 提供两种解法 855. Exam Room 考场就座(两种解法) 题目描述 示例: 解答1 代码1 解答2 代码2 855. Exam Ro ...

  9. python timer使用-Python timer定时器两种常用方法解析

    这篇文章主要介绍了Python timer定时器两种常用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法一,使用线程中现成的: 这种一般 ...

最新文章

  1. 剑指offer:矩形覆盖
  2. poj 1654 Area
  3. TCP/IP数据包结构分解
  4. Objective-C复制解析
  5. 最热门的10个Java微服务框架
  6. 最全数据结构详述: List VS IEnumerable VS IQueryable VS ICollection VS IDictionary
  7. python 声明不赋值_为什么Python赋值不返回值?
  8. SAI2 安装及导入笔刷素材
  9. python画太极八卦图_先天太极八卦图的唯一正确画法
  10. Unity中使用摇杆控制
  11. word 尾注 脚注_如何在Microsoft Word中使用脚注和尾注
  12. 服务器svn自动同步,svn主备服务器实时同步
  13. Model of an Electric Arc for Circuit Analysis(翻译)
  14. 【渝粤题库】国家开放大学2021春2721乡镇行政管理题目
  15. Java生成两个圆判断是否重叠,用java随机画出两个圆,判断它们是不是相交
  16. 在GPT分区的磁盘上创建ESP分区图文教程
  17. 学习 Golang 开发,需要掌握这几个开源框架
  18. ListIterator
  19. 【软件测试】黑盒测试方法小结
  20. Jetpack-Compose之三附带效应(副作用)

热门文章

  1. 2021年三季度中国物流行业A股上市企业营收排行榜:*ST飞马于12月初成功摘星脱帽(附热榜TOP46详单)
  2. 联发科4G安卓工控触摸主板
  3. 基于RK3399+5G的医用视频终端设计
  4. _main函数 int __cdecl invoke_main(void) (?invoke_main@@YAHXZ)
  5. 一句话木马与中国菜刀
  6. 新手学python,如何才能更快升职加薪,迎娶白富美,走上人生巅峰
  7. 你真的懂请求参数和路径变量?
  8. 计网(二)—— 硬件与软件
  9. VR虚拟现实的工作原理
  10. 【Unity-实现小功能-001】骰子功能