Python代码
#coding: utf-8
import numpy
import copy
import time
a = [0, 1, 5, 8, 9, 10, 17, 17, 20, 24, 30] #不同长度钢条的价格表,a[k]对应于长度为k的刚条的价格
assert len(a) == 11
cost = numpy.zeros(shape=101, dtype=int)
N = 100 #待求长度
K = 10 #价格表长度
pattern_dict = {0: []}
t0 = time.clock()
for n in xrange(1, N+1):
temp = 0
max_num = min(n, K)
for k in xrange(1, max_num+1):
cur = a[k] + cost[n-k]
if cur > temp:
temp = cur
pattern = copy.copy(pattern_dict[n-k])
pattern.append(k)
cost[n] = temp
pattern_dict[n] = pattern
print '长度为%d的钢条的最优切分方案为:' % N
print ' ', pattern_dict[N]
print '最高价格为:%d' % cost[-1]
print '时间消耗:%f' % time.clock() - t0