习题整理(简单01背包 可用查并集2022/4/24)

习题整理

提示:之前的习题在习题集合



提示:以下是本篇文章正文内容,下面案例可供参考

一、诱人的宝藏

题目:勇敢的小明来到一个失落的村庄。他非常幸运,找到了很多宝藏和一个空的大铁箱,但是失落的村庄里有很多愤怒的僵尸。小明非常勇敢,他决定打败僵尸,然后把所有的宝藏都带回来。一场旷日持久的残酷战斗从早到晚持续,最后小明发现僵尸是不死的,不可战胜的。
但是,这些宝藏不应该留在这里。不幸的是,由于大铁箱容量的限制,小明无法携带所有宝藏。村庄里的宝藏只有两种:祖母绿宝石和蓝宝石。所有的宝石在大小和价值上都是相等的,数量是无穷的。
聪明得你,能不能考虑到箱子的大小、每种宝石的价值和大小,计算出我们的勇士小明能带回的宝藏的最大价值。

输入输出格式
输入格式
输入只有一行,包含五个整数 N,S1,V1 ,S2,V2
​,表示宝箱的大小为 N,祖母绿宝石的大小和价值为 S1
和V1,蓝宝石的大小和价值为 S2和 V 2。所有整数都是正整数。整数之间以空格间隔。
输出格式
针对输入,打印出小明可以随身携带的所有宝藏的最大总值。
输入输出样例1
输入
100 1 1 2 2
输出
100

1.思路

  • 这道题本身其实是弱化的01背包问题,但我们不用动态规划做。而是换一个思路。 我们只需要考虑两种情况
  • 第一种先装绿宝石装到装不下,剩余的空间去装蓝宝石
  • 第二种先装蓝宝石装到装不下,剩余的空间去装绿宝石 然后我们比较这两种情况,哪一种的价值最大?输出即可

2.代码

代码如下:

a=input() #输入的那一行就是背包容量,绿宝石重量和价值,蓝宝石的重量和价值  
a=a.split() #以空格作为分隔符,将整个字符串分割成列表返回  
a=[int(i) for i in a]  
b=max((a[0]//a[1])*a[2]+((a[0]%a[1])//a[3])*a[4],(a[0]//a[3])*a[4]+((a[0]%a[3
  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

歆雫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值