import sys
def dp(total,num,it):
#dp[i][j]=min(dp[i-1][j],dp[i-1][j-weight[i]]+1)
weight=list(map(int,next(it).strip('\n').split()))
dp=[float('inf')]*(total+1)
dp[0]=0
for i in range(1,num+1):
for j in range(total,0,-1):
if j-weight[i-1]>-1:
dp[j]=min(dp[j],dp[j-weight[i-1]]+1)
ans=dp[-1]
if ans!=float('inf'):
print(ans)
else:
print(0)
if __name__ =='__main__':
it=iter(sys.stdin)
while 1:
try:
total=int(next(it).strip('\n'))
num=int(next(it).strip('\n'))
dp(total,num,it)
except:
break
每种邮票只能取一次,转化为01背包问题



京公网安备 11010502036488号