题目:
在[0,M]处放置广告牌,位置收益自拟,两块广告牌之间距离要大于5,求最大收益
val = [3,5,6,5,1,10]
dist = [2,6,7,12,14,20]
bv = 0
pv = 0
pd = -1000
x = [0] * len(val)
def Backtrack(i,pv,bv,pd):
global path
if i == len(val):
if pv > bv:
bv = pv
path = [x[i] for i in range(len(x))]
else:
if dist[i] - pd > 5:
for j in range(2):
x[i] = j
pv += j * val[i]
pd = pd * (1 - j) + dist[i] * j
bv = Backtrack(i+1,pv,bv,pd)
pv -= j * val[i]
else:
x[i] = 0
bv = Backtrack(i+1,pv,bv,pd)
return bv
bv = Backtrack(0,pv,bv,pd)
path = [dist[i] for i in range(len(path)) if path[i] == 1]
print("收益:\t"+'\t'.join([str(_) for _ in val]))
print("位置:\t"+'\t'.join([str(_) for _ in dist]))
print('最大收益是:%d' % bv)
print("位置分别为:"+'->'.join([str(_) for _ in path]))