dp:钢条切割

给定一段钢条,和不同长度的价格,问如何切割使得总价格最大。
在这里插入图片描述
示例:

长度为1的最大收益为:1
长度为2的最大收益为:5
长度为3的最大收益为:8
长度为4的最大收益为:10
长度为5的最大收益为:13
长度为6的最大收益为:17
长度为7的最大收益为:18
长度为8的最大收益为:22
长度为9的最大收益为:25
长度为10的最大收益为:30

递归1

切成两段各长2英寸的钢条,将产生P2 + P2 = 5 + 5 = 10 的收益,为最优解。

长度为n英寸的钢条共有2^(n-1)种不同切割方案,因为在距离钢条左端 i (i=1, 2, … , n-1)英寸处,总是可以选择切割或者不切割。用普通的加法符号表示切割方案,因此7=2+2+3表示将长度为7的钢条切割为3段:2英寸,2英寸,3英寸。

若一个最优解将钢条切割为k段(1≤k≤n),那么最优切割方案 n = i1 + i2 + … + ik.

将钢条切割为长度分别为i1, i2, … , ik的小段,得到的最大收益为 Rn = Pi1 + Pi2+…+Pik

对于上面表格的价格样例,可以观察所有最优收益值Ri (i: 1~10)以及最优方案:

长度为1:切割方案1=1(无切割)。最大收益R1 = 1

长度为2:切割方案2=2(收益5),1+1=2(收益2)。最大收益R2 = 5

长度为3:切割方案3=3(收益8),1+2=3(收益6),2+1=3(收益6)。最大收益8

长度为4:切割方案4=4(收益9),1+3=4(收益9),2+2=4(收益10),3+1=4(收益9),1+1+2=4(收益7),1+2+1=4(收益7),2+1+1=4(收益7),1+1+1+1=4(收益4)。最大收益10

长度为5:切割方案5=5(10),1+4=5(10),2+3=5(13),1+1+3=5(10),2+2+1=5(11),1+1+1+1+1=5(5),其他是前面的排列。最大收益13

依次求出。。。

更一般的,对于Rn(n≥1),可以用更短的钢条的最优切割收益来描述它:

Rn = max(Pn, R1+Rn-1, R2 + Rn-2, … , Rn-1 + R1)

第一个参数Pn对应不切割,直接出售长度为n的方案。

其他n-1个参数对应n-1种方案。对每个i=1,2,….,n-1,将钢条切割为长度为i和n-i的两段,接着求解这两段的最优切割收益Ri和Rn-i;(每种方案的最优收益为两段的最优收益之和)。

由于无法预知哪种方案会获得最优收益,必须考察所有可能的 i ,选取其中收益最大者。若不切割时收益最大,当然选择不切割。

注意到:

  • 为了求解规模为n的原问题,先求解子问题(子问题形式完全一样,但规模更小)。
  • 即首次完成切割后,将两段钢条看成两个独立的钢条切割问题实例。
  • 通过组合两个相关子问题的最优解,并在所有可能的两段切割方案中获取收益最大者,构成原问题的最优解。

称钢条切割问题满足最优子结构性质:

问题的最优解由相关子问题的最优解组合而成,而这些子问题可以独立求解。

除上述解法,问题可化简为一种相似的递归:从左边切割下长度为 i 的一段,只对右边剩下的长度为 n-i 的一段进行继续切割(递归求解),对左边一段则不再进行切割。

即问题分解的方式为:将长度为n的钢条分解为左边开始一段,以及剩余部分继续分解的结果。(这样,不做任何切割的方案可以描述为:第一段长度为n,收益为Pn,剩余部分长度为0,对应收益为R0 = 0)。于是得到上面公式的简化版本:
在这里插入图片描述
在此公式中,原问题的最优解只包含一个相关子问题(右端剩余部分的解),而不是两个。

    public static int  Violence (int n, int[] price){
        if (price == null || price.length == 0 || n <= 0){
            return 0;
        }


        int max = 0;
       // 题目转化为: 到索引n处之前各个数组之和的最大值
       // i = 0,表示不切割,假设不切割时利润最大
       // i = 1时,表示当切割1
        for (int i = 0; i <= n; i++){
            return Math.max(price[n], price[1] + price[n-1]);
        }

        
        return max;
    }

自顶而下备忘

  • 用一个map将
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章