如何解决改良的0-1背包
有些项目是重复排列的,每一种都有一定的成本。您有x金额。您也可以自由地将一种商品的价格设置为0。但是我们只能选择连续的商品(不能跳过)。您最多可以挑选什么?例如。 abacdab,成本(a:1,b:2,c:1,d:5),x = 6,因此您可以提取的大多数商品为6(abacda,设置成本d = 0)。 我的方法:从abacdab开始,从右边减少一个字母,然后将最大(计数*成本)的字母成本设置为0后检查成本,在第一个子字符串满足且音符长度为lmax时停止。 现在,使用bacda重复上述步骤(删除第一个字母),但在长度== lmax的子字符串处停止。 是否可以使用动态编程来解决此问题的更快方法?
解决方法
我的方法:
cot={'a':1,'b':2,'c':1,'d':5}
def maxarticles(s,cot,x):
l=len(s)
lmax=0
smax=''
cmax=0
for i in range(l):
if i+lmax==l:
break
for j in range(l,i+lmax,-1):
subarr=s[i:j]
c=cost(subarr,cot)
print(subarr,c)
le=j-i
if c<=x:
if lmax<le:
smax=subarr
lmax=le
cmax=c
print(subarr,c,lmax)
break
return smax,lmax,cmax
def cost(s,cot):
counts={}
m=0
total=0
for i in s:
val=cot[i]
if i in counts:
counts[i]+=val
else:
counts[i]=val
if counts[i]>m:
m=counts[i]
total+=val
return total-m
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。