01背包变种,确定dp[j], j 的意义
t = int(input())
big = float('inf')
for _ in range (t):
m, x = map(int, input().split())
c = []
h = []
sm = 0
for i in range(m):
ci, hi = map(int, input().split())
c.append(ci)
h.append(hi)
sm = sm + hi
dp = [0] + [big] * sm
for i in range(m):
for j in range(sm, h[i] - 1, -1):
if dp[j - h[i]] + c[i] <= i * x:
dp[j] = min(dp[j], dp[j - h[i]] + c[i])
for j in range(sm, -1, -1):
if dp[j] != big:
print(j)
break