动态规划法(五)钢条切割问题(rod cutting problem)

  继续讲故事~~
  我们的主人公现在已经告别了生于斯,长于斯的故乡,来到了全国最大的城市S市。这座S市,位于国家的东南部,是全国的经济中心,工商业极为发达,是这个国家的人民所向往的城市。这个到处都留着奶与蜜的城市,让丁丁充满了好奇感和新鲜感,他多想好好触摸这个城市的脉搏啊!
  这不,他此刻正走在城市的某高新园区,不远处传来钢条切割的声音。他好奇地走上前去,看着工人们正在熟练地切割钢条,并打包完成包装。此时,一位工人看到了丁丁,一看,竟是自己的同乡。他热情地上去打了招呼,并询问了乡下的情况,他俩约了中午一起吃饭。
  午饭时,老乡热情地请丁丁在园区最好的饭店吃饭,他俩聊得也很开心。突然,老乡想到了丁丁学过计算机方面的理论,于是他准备把自己最近遇到的问题告诉丁丁,看看他能不能解决。

已知钢条价格表如下:

  听到老乡正在为整个问题发愁,丁丁内心也想着尝试解决这个问题。毫无疑问,这个问题也是可以用动态规划法解决的,于是,他拿出稿纸推演起来:

采用自底向上法(bottom-up method)来求解该问题,需要用一个列表来记录收益Rn,一个列表来记录切割方案,其Python代码如下:

import time
# 使用动态规划法(dynamic programming)解决钢条切割问题

# 钢条长度与对应的收益
length = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
profit = (1, 5, 8, 9, 10, 17, 17, 20, 24, 30)

# 动态归纳法,自底向上的CUT-ROD过程,加入备忘机制
# 运行时间: 多项式
# 参数:profit: 收益列表, n: 钢条总长度
# 返回参数: q: 最大收益
def bottom_up_cut_rod(profit, n):
    r = [0] # 收益列表
    s = [0]*(n+1) # 切割方案列表

    for j in range(1, n+1):
        q = float('-inf')
        for i in range(1, j+1):
            if max(q, profit[length.index(i)]+r[j-i]) == profit[length.index(i)]+r[j-i]:
                s[j] = i
            q = max(q, profit[length.index(i)]+r[j-i])

        r.append(q)
    return r[n], s[n]

# method of how to cut the rod
def rod_cut_method(profit, n):
    how = []
    while n != 0:
        t,s = bottom_up_cut_rod(profit, n)
        how.append(s)
        n -= s

    return how

for i in range(1, 11):
    t1 = time.time()
    money,s = bottom_up_cut_rod(profit, i)
    how =  rod_cut_method(profit, i)
    t2 = time.time()
    print('profit of %d is %d. Cost time is %ss.'%(i, money, t2-t1))
    print('Cut rod method:%s\n'%how)

输出结果:

profit of 1 is 1. Cost time is 0.0s.
Cut rod method:[1]

profit of 2 is 5. Cost time is 0.0s.
Cut rod method:[2]

profit of 3 is 8. Cost time is 0.0s.
Cut rod method:[3]

profit of 4 is 10. Cost time is 0.0s.
Cut rod method:[2, 2]

profit of 5 is 13. Cost time is 0.0s.
Cut rod method:[3, 2]

profit of 6 is 17. Cost time is 0.0s.
Cut rod method:[6]

profit of 7 is 18. Cost time is 0.0s.
Cut rod method:[6, 1]

profit of 8 is 22. Cost time is 0.0005009174346923828s.
Cut rod method:[6, 2]

profit of 9 is 25. Cost time is 0.0s.
Cut rod method:[6, 3]

profit of 10 is 30. Cost time is 0.0s.
Cut rod method:[10]

不一会儿他就搞定了这个问题,他将不同长度的钢条所能获得最大收益和对应的切割方案告诉了老乡。老乡听后大喜,他为丁丁解决了这个困扰它们公司长久的问题而感到由衷高兴,有了以上的结果,那么,钢条的长度再长也不是问题了。
  午饭后,老乡将刚才吃饭时丁丁的解决方法告诉了老板,老板也是喜出望外,他决定高薪聘请这个年轻人。而我们的丁丁,他早已离开高新区,向着下一个目的地出发了~~

注意:本人现已开通两个微信公众号: 用Python做数学(微信号为:python_math)以及轻松学会Python爬虫(微信号为:easy_web_scrape), 欢迎大家关注哦~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 中国教育报:乡村教师的十个“梦想” 今年,在北京参加全国人民代表大会期间,与一位领导谈到乡村学校好教师“进不去”、...
    7f6a821e8bfa阅读 881评论 0 0
  • 南京,一个堪比一线城市的二线前沿城市。快节奏的生活,快节奏的脚步,较高的生活成本,却只有我一个人。一个人搬家,一个...
    爱吃醋的柯基阅读 69评论 0 0
  • 冬天絮语(三章) 走进冬天 早晨,薄薄如轻纱一般的霜,悠悠地洒满了大地;...
    王赵民阅读 403评论 0 1
  • 版权声明:本文为戴德文首发于公众号【戴德文随笔】,如需转载,请联系作者。 今天在网上闲逛,本意是想搜索有关「日语俳...
    影像派阅读 806评论 5 3
  • 图片1 恰好遇见你,不早不晚,只要你来 图片2 生命一向带我不薄,但你让它更加美好。 BABY, Life wa...
    NIU小丫阅读 355评论 0 0