编程实现:
小蓝桌子上摆放着一个容积为m的书包及n件不同的商品,且每件商品上都标有商品的体积和商品的价值。
小蓝要满足以下要求挑选商品装入书包中
要求1:挑选的商品总体积不超过书包的容积:
要求2:挑选的商品商品总价值最大。
请你帮助小蓝计算出能装入书包的商品的最大价值。
输入描述:
第一行输入两个正整数m和n,m表示书包的容积,n表示商品的数量。两个正整数之间一个英文逗号隔开
第二行输入n个正整数表示商品的体积,正整数之间一个英文逗号隔开
第三行输入n个正整数表示商品的价值,正整数之间一个英文逗号隔开(商品价值的输入顺序对应商品体积输入顺序)
输出描述:输出装入书包的商品的最大价值
样例输入: 11,3
2,6,4
1,5,2
样例输出: 7
解题思路:
1、明确输出目标是装入书包的商品的最大价值
2、
①明确目标后,那么价值肯定只从大到小依次加起来,但要注意使用sort()指令排序话,无法使得两个列表排序之后还是对应关系的~
②所以要借助index()索引值指令以及第三个列表帮助
3、考虑是否全部加起来没有超过体积大小的情况~
m,n=map(int,input().split(","))
a=list(map(int,input().split(",")))##体积列表
b=list(map(int,input().split(",")))##价值列表
c=b[:]##建立价值2列表,不影响原来的对应关系
if sum(a)<m:##是否全部加起来没有超过体积大小
print(sum(b))
else:
for i in range(n):
key = a[i]
t = a[i] ##体积
s = b[i] ##价值
for j in range(n):
if (i != j and key + a[j] < m):
c.append(b[i] + b[j])
t += a[j]
s += b[j]
if t > m:
t -= a[j]
s -= b[j]
c.append(s)
print(max(c))