321
社区成员




小艺酱每天都在吃和睡中浑浑噩噩的度过。 可是小肚子是有空间上限v的。 小艺酱有n包零食,每包零食占据小肚子空间a_i并会给小艺酱一个甜蜜值b_i。 小艺酱想知道自己在小肚子空间上限允许范围内最大能获得的甜蜜值是多少?
嗯,C站的题目就这么无语,曾经的描述,是最大背包,现在示例改成01背包,但是。。。用最大背包能过 90%,剩下一个我也不知道是啥背包。
# 90% 通过率
v,n = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
dp = [[0] * (v + 1) for _ in range(n)]
dp[0] = [0 if i < arr[0][0] else arr[0][1] * (i // arr[0][0]) for i in range(v + 1)]
for i in range(1,n):
if arr[i][0] == 0:
continue
for j in range(1,v + 1):
if j < arr[i][0]:
dp[i][j] = dp[i - 1][j]
else:
z = j // arr[i][0]
dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - arr[i][0] * z] + arr[i][1] * z)
print(dp[-1][-1])