动态规划之钢条切割

钢条切割问题,给定n英寸钢条和一个价格表
pi
,求最优切割方案,使销售收益最大

1.递归方法

递归求解方法

rn=max1in(Pi+rni)

将长度为n的钢条分解为左边开始的一段,以及剩余部分继续分解的结果

p = [0,1,5,8,9,10,17,17,20,24,30]
def CUR_ROD(p,n):
if n == 0:
return 0
q = float("-inf")
for i in range(1,n+1):
q = max(q, p[i] + CUR_ROD(p,n-i))
return q
print CUR_ROD(p,4)
#返回值为10
2.动态规划方法

自底向上,还有一种自顶向下的带备忘的算法

先赋值r[0]=0,然后再计算r[1]…,记录

p = [0,1,5,8,9,10,17,17,20,24,30]
def CUR_ROD(p,n):
r = []
r.append(0)
for j in range(1,n+1):
q = float("-inf")
for i in range(1,j+1):
q = max(q, p[i] + r[j-i])
r.append(q)
return r
print CUR_ROD(p,4)
#返回值为[0, 1, 5, 8, 10],各个值表示当钢条分别为0,1,2,3,4长度时的最优收益

你可能感兴趣的:(动态规划)