蓝桥杯STEAM测试python2022一月测试题第五题

编程实现:
小蓝桌子上摆放着一个容积为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))
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ha___。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值