📜  用于切割杆的PHP程序 | DP-13

📅  最后修改于: 2022-05-13 02:24:09.573000             🧑  作者: Mango

用于切割杆的PHP程序 | DP-13

给定一根长度为 n 英寸的杆和一个价格数组,其中包含所有尺寸小于 n 的价格。确定通过切割杆并出售碎片可获得的最大值。例如,如果杆的长度为 8,并且不同部分的值如下所示,则可获得的最大值为 22(通过切割长度为 2 和 6 的两段)

length   | 1   2   3   4   5   6   7   8  
--------------------------------------------
price    | 1   5   8   9  10  17  17  20

并且如果价格如下,那么最大可获取值是24(切8个长度1)

length   | 1   2   3   4   5   6   7   8  
--------------------------------------------
price    | 3   5   8   9  10  17  17  20

以下是杆切割问题的简单递归实现。实现只是简单地遵循上面提到的递归结构。

PHP


PHP


输出:

Maximum Obtainable Value is 22

考虑到上述实现,以下是长度为 4 的 Rod 的递归树。

cR() ---> cutRod() 

                             cR(4)
                  /        /           
                 /        /              
             cR(3)       cR(2)     cR(1)   cR(0)
            /  |         /         |
           /   |        /          |  
      cR(2) cR(1) cR(0) cR(1) cR(0) cR(0)
     /        |          |
    /         |          |   
  cR(1) cR(0) cR(0)      cR(0)
   /
 /
CR(0)

在上面的部分递归树中,cR(2) 被求解了两次。我们可以看到,有很多子问题被一次又一次地解决了。由于再次调用相同的子问题,因此该问题具有重叠子问题的属性。因此,棒切割问题具有动态规划问题的两个性质(见这个和这个)。与其他典型的动态规划 (DP) 问题一样,可以通过以自下而上的方式构造临时数组 val[] 来避免对相同子问题的重新计算。

PHP


输出:
Maximum Obtainable Value is 22

请参阅关于切割杆的完整文章 | DP-13 了解更多详情!