zoukankan      html  css  js  c++  java
  • 钢条切割

    今天起床,清风徐来,迎接此题!

    问题描述:切割一根钢条,不同的长度对应不同的售价,如何切割使得获得最大的利益。

    在这里插入图片描述

    Another decipition:

    某公司购买钢条将其切割成锻钢条出售,切割过程本身没有支出,而钢条切割的长度不同价格不同,比如:
    长度i 1 2 3 4 5 6 7 8 9 10
    价格pi 1 5 8 9 10 17 17 20 24 30
    给定一段长度为n的钢条和价格表,求使收益最大的钢条切割方案

    分析: 这是一个最优化问题,对于一般的n 用rn表示最大收益, rn = max{pn, r1+rn-1,r2+rn-2,…..rn-1+r1}; pn表示不切割的时候,其他表示切成两段,分别长i 和n-i,接着求解这两段的最优切割收益 这里为了求得原问题,先求形式完全一样但规模更小的子问题,即完成首次切割后,将切割出的两部分当做两个独立的实例,在组合子问题的最优解,在所有可能的两段切割方案中选取组合收益最大的,构成原问题的最优解。 所以钢条切割问题有最优子结构性质:问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解.

    钢条切割问题还存在一种思路上更为简单的递归方式: 
    将钢条从左边切割下长度为i 的一段,只对右边的n-i长度的进行递归切割,所以rn = max(pi + rn-i); (左边一段的加上右边的最大收益)这样最优解只包含一个子问题 

    Reference 1:  https://blog.csdn.net/liu798675179/article/details/52997987

    Reference 2:https://blog.csdn.net/jianfpeng241241/article/details/51855214

    Relationships:https://download.csdn.net/download/qq_42324327/11156405

    Resauces Taken:

    我们可以用拉格朗日乘数法,求解给定条件下的方程最优解,同样,动态规划算法也是用于在一定条件下的求解最优解的方法

     

     

     一些参考:

    # 自下而上的动态规划
    def cutMemo(p, n):
        r = [0] * (n+1)
        for i in range(1, n+1):
            if n == 0:
                return 0
            q = 0
            for j in range(1, i+1):
                q = max(q, p[j-1]+r[i-j])
                r[i] = q
        return r
    

      

  • 相关阅读:
    INewPolygonFeedback接口(实时显示所画多边形的面积)
    RichTextBox追加文本信息,并根据信息的多少自动下移
    Google tile和TMS的索引算法
    出差咸阳
    失败的 炸羊排
    年中总结
    Oracle 两个表之间的数据更新
    ArcEngine下,实现图形的擦除操作(Erase操作)
    C#中使用ListView动态添加数据不闪烁(转)
    出差略阳
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11205117.html
Copyright © 2011-2022 走看看