解题思路:动态规划,新加的砝码和目前所得的质量可以相加,相减(两种情况,新砝码减旧质量或旧质量减新质量),将所得的结果(大于0)存入dp,供下一次使用,
注意事项:中间要专门设一个列表,用于存储新称的重量,不能直接存入dp,用set集合可以比list速度快
参考代码:
n = int(input())
arr = list(map(int,input().split()))
dp = set()
dp.add(arr[0])
for i in range(1,n):
t = set()
if arr[i] not in dp:
t.add(arr[i])
for j in dp:
if arr[i]+j not in dp:
t.add(arr[i]+j)
if arr[i]-j not in dp and arr[i]-j>0:
t.add(arr[i]-j)
if j-arr[i] not in dp and j-arr[i]>0:
t.add(j-arr[i])
dp = dp.union(t)
print(len(dp))
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:634 |
C语言程序设计教程(第三版)课后习题6.5 (C语言代码)浏览:660 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:570 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:1482 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:561 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:569 |
1126题解浏览:649 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:612 |
最好的,浏览:601 |
开心的金明 (C语言代码)浏览:563 |