输入的第一行有两个整数T(1 <= T <= 1000)和M(1 <= M <= 100),T代表总共能够用来采药的时间,M代表山洞里的草药的数目。 接下来的M行每行包括两个在1到100之间(包括1和100)的的整数,分别表示采摘某株草药的时间和这株草药的价值。
可能有多组测试数据,对于每组数据, 输出只包括一行,这一行只包含一个整数,表示在规定的时间内,可以采到的草药的最大总价值。
70 3 71 100 69 1 1 2
3
while True: try: t,m=map(int,input().strip().split()) inp=[] for i in range(m): inp.append(list(map(int,input().strip().split(' ')))) dp=[] for i in range(t+1): dp.append([0]*(m+1)) for i in range(t+1): for j in range(1,m+1): if inp[j-1][0]<=i: dp[i][j]=max(dp[i][j-1],dp[i-inp[j-1][0]][j-1]+inp[j-1][1]) else: dp[i][j]=dp[i][j-1] #print(dp) print(dp[-1][-1]) except: break
动态规划
while True: try: t,m = list(map(int,input().split())) selects = [] for i in range(m): selects.append(list(map(int,input().split()))) values = [0] * (t+1) for i in range(m): if selects[i][0] <= t: for j in range(t,selects[i][0]-1,-1): values[j] = max(values[j],values[j-selects[i][0]]+selects[i][1]) print(values[t]) except Exception: break