动态规划也是可以的: 表示前
个砝码是否能称量
的重量, 转移方程:
while 1:
try:
n = input()
except:
break
n = int(n)
weights_str = input().split(' ')
weights = []
for elem in weights_str:
weights.append(int(elem))
nums_str = input().split(' ')
nums = []
for elem in nums_str:
nums.append(int(elem))
max_weight = 0
for i in range(n):
max_weight += nums[i] * weights[i]
dp = [[0 for i in range(max_weight + 1)] for j in range(n + 2)]
M = 1
dp[0][0] = 1
for i in range(1, n + 1):
for w in range(M):
for j in range(nums[i - 1] + 1):
if dp[i - 1][w] == 1:
dp[i][w + j * weights[i - 1]] = 1
M = max(w + j * weights[i - 1] + 1, M)
ans = sum(dp[n])
print(ans) 
京公网安备 11010502036488号