题目描述
解题思路
求采到草药的最大总价值用动态规划求解,dp数组存放的范围就是0到价值总和。
dp[i]表示挖到价值为i的草药需要花费的时间
dp数组初始值dp[0]等于0因为挖到价值为0的草药需要0天,而其他等于无穷。
每当dp[j] > dp[j - value[i]] + time[i]时
既挖到当前价值草药的时间大于当前价值草药-该草药价值再加上挖该草药的时间时就更新dp,也就是挖同样价值的草药我这个时间更短我就更新
代码
t, m = map(int, input().split())
time = []
value = []
for i in range(m):
s = input().split()
time.append(int(s[0]))
value.append(int(s[1]))
dp = [float('inf') for i in range(sum(value) + 1)]
#dp[i]表示挖到价值为i的草药需要花费的时间
dp[0] = 0
for i in range(m):
for j in range(sum(value), value[i] - 1, -1):
if dp[j] > dp[j - value[i]] + time[i]:
dp[j] = dp[j - value[i]] + time[i]
for i in range(sum(value), -1, -1):
if dp[i] <= t:
print(i)
break