本问题是动态规划中的基本问题,问题出自算法导论15.1。问题描述如下:
给定一段长度为n英寸的钢条和一个价格表 (i=1,2,……n),求切割钢条方案,使得销售收益最大。采用自底向上的动态规划算法实现,代码如下:
def getValue(p,n):
c = 1
global values
values = [0]
global l
l = [0]
for i in range(1,n+1):
max = -1
index = 0
for j in range(1,11):
if j > i:
break
if p[j] + values[i-j] -c > max:
max = p[j] + values[i-j] -c
index = j
if p[i] > max:
max = p[i]
index = i
values.append(max)
l.append(index)
return l
getValue([0,1,5,8,9,10,17,17,20,24,30],10)
n = 6
print(values[n])
while n >= 1:
print(l[n])
n -= l[n]