题目描述
XP每天都会思考一个问题,今天午餐去哪里吃?这是一个很重要的问题,这会影响到他下午的体力值。他的午餐预算是M元,现在有N种菜品,每一种菜品的价格和能够提供的体力值已知(每种菜品只能选择一次),请问如何选择菜品能够让XP下午的体力值最大呢?
输入
多组输入
第一行:M元和菜品数量N。
接下来N行,每一行两个整数,分别表示每一种菜品的价格(vi)和能够获得的体力值(wi)。
(0<N<=20,0<=M<=1000)(0<=vi<=50,0<=wi<=100)
输出
最大体力值。
样例输入 Copy
10 5 1 5 2 4 3 3 4 2 5 1
样例输出 Copy
14
def solution(c, n, weights, values): dp = [[0 for i in range(c + 1)] for i in range(n + 1)] for i in range(1, n + 1): for j in range(1, c + 1): if weights[i] <= j: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weights[i]] + values[i]) else: dp[i][j] = dp[i - 1][j] return dp[n][c] while True: try: c, n = list(map(int, input().split())) weights=[] values = [] weights.insert(0,0) values.insert(0,0) for _ in range(n): weight, value = list(map(int, input().split())) weights.append(weight) values.append(value) result = solution(c, n, weights, values) print(result) except EOFError: break
注意:将主函数和输入输出分开来写!!