题解 | 最小邮票数
最小邮票数
https://www.nowcoder.com/practice/83800ae3292b4256b7349ded5f178dd1?tpId=40&tqId=21345&rp=1&difficulty=&judgeStatus=&tags=/question-ranking
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背包问题
美团公司福利 3564人发布