直接以一个题目为例子
题目描述
玥玥带乔乔一起逃亡,现在有许多的东西要放到乔乔的包里面,但是包的大小有限,所以我们只能够在里面放入非常重要的物品。现在给出该种物品的数量、体积、价值的数值,希望你能够算出怎样能使背包的价值最大的组合方式,并且输出这个数值,乔乔会非常感谢你。
输入描述:
第1行有2个整数,物品种数n和背包装载体积v;
第2行到i+1行每行3个整数,为第i种物品的数量m、体积w、价值s。
输出描述:
仅包含一个整数,即为能拿到的最大的物品价值总和。
示例1
输入
2 10
3 4 3
2 2 5
输出
13
说明
选第一种一个,第二种两个,结果为3x1+5x2=13。
备注:
1≤v≤500
1≤n≤2000
1≤m≤10
1≤w≤20
1≤s≤100
解答
下面给出python方式最高分的答案
n,v=map(int,input().split()) #输入一行,确定n和v,split默认使用空格分割
l=[]
sum_p = 0
sum_v=v
for i in range(n): #输入每一行n的信息
l0=list(map(int,input().split()))
l.append(l0)
l.sort(key=lambda k:k[2]/k[1],reverse=True) #对每个物品按照单位体积的价值排序
for i in l:
for j in range(i[0]):
if sum_v-i[1]>=0:
sum_p+=i[2]
sum_v-=i[1]
else:
break
print(sum_p)
总结
输入使用input函数,使用map的方式进行分割
需要学习
map的使用
input().split0函数
list.sort()函数
lambda表达式