A25691. 编程实现:假设果园中有 N (1≤N≤100)种水果。猴子想要采摘一些水果带回家,但猴子采摘水果的总重量不能超过 W(1≤W≤1000)。已知每种水果的最大采摘数量 Ni (1≤Ni≤100)、每种水果单个的重量 Wi (1≤Wi≤100)以及每种水果单个的维生素含量 Vi (1≤Vi≤100)。在采摘水果的总重量不超过 w 的情况下,猴子最多可以获得多少维生素。例如:N=3,W=5,表示有 3…
题目描述
编程实现:
假设果园中有 N (1≤N≤100)种水果。猴子想要采摘一些水果带回家,但猴子采摘水果的总重量不能超过 W(1≤W≤1000)。
已知每种水果的最大采摘数量 Ni (1≤Ni≤100)、每种水果单个的重量 Wi (1≤Wi≤100)以及每种水果单个的维生素含量 Vi (1≤Vi≤100)。
在采摘水果的总重量不超过 w 的情况下,猴子最多可以获得多少维生素。
例如:N=3,W=5,表示有 3 种水果,旦猴子采摘水果的总重量不能超过 5。
每种水果的最大采摘数量 Ni、每种水果单个的重量 Wi 及每种水果单个的维生素含量 Vi,如下表:

猴子可按以下方式采摘,获得最多的维生素:
1)采摘第一种水果 3 个,3 个水果的重量为 3,3 个水果维生素含量为 6;
2)采摘第二种水果 1 个,1 个水果的重量为 2,1 个水果维生素含量为 4;
水果总的维生素含量最多为 10 (10=6+4)。
输入描述:
第一行输入两个正整数 N (1≤N≤100)和 W (1≤W≤1000),分别表示水果的种类数和猴子最多可采摘的水果总重量,两个正整数之间以一个空格隔开
接下来 N 行,每行输入三个正整数 Ni (1≤Ni≤100)和 Wi(1≤Wi≤100) 及 Vi (1≤Vis100),分别表示某种水果的最大
采摘数量和某种水果单个的重量及某种水果单个的维生素含量,正整数之间以一个空格隔开
输出描述:
输出一个整数,表示在不能超过水果总重量 w 的情况下,猴子最多能获得到的维生素值
样例输入:
3 5
4 1 2
1 2 4
2 4 5样例输出:
10参考答案
#参考答案1
N, V = map(int, input().split())
dp = [0] * (V+1)
for _ in range(N):
s, v, w = map(int, input().split())
for _ in range(s):
for j in range(V, v-1, -1):
dp[j] = max(dp[j], dp[j - v] + w)
print(dp[-1])
#参考答案2
s=input().split(' ')
N=int(s[0])
w=int(s[1])
geshu=[0]*1000
zhongliang=[0]*1000
value=[0]*1000
ans=[0]*10000
for i in range(1,N+1):
l=input().split(' ')
geshu[i]=int(l[0])
zhongliang[i]=int(l[1])
value[i]=int(l[2])
for i in range(1,N+1):
for j in range(1,geshu[i]+1):
for k in range(w,zhongliang[i]-1,-1):
ans[k]=max(ans[k],ans[k-zhongliang[i]]+value[i])
print(ans[w])答案解析
评分标准:
4 分:能正确输出筆一组数据;
4 分:能正确输出第二组数据;
4 分:能正确输出第三组数据;
4 分:能正确输出第四组数据;
4 分:能正确输出第五组数据;
5 分:能正确输出第六组数据。