习题整理
提示:之前的习题在习题集合
提示:以下是本篇文章正文内容,下面案例可供参考
一、诱人的宝藏
题目:勇敢的小明来到一个失落的村庄。他非常幸运,找到了很多宝藏和一个空的大铁箱,但是失落的村庄里有很多愤怒的僵尸。小明非常勇敢,他决定打败僵尸,然后把所有的宝藏都带回来。一场旷日持久的残酷战斗从早到晚持续,最后小明发现僵尸是不死的,不可战胜的。
但是,这些宝藏不应该留在这里。不幸的是,由于大铁箱容量的限制,小明无法携带所有宝藏。村庄里的宝藏只有两种:祖母绿宝石和蓝宝石。所有的宝石在大小和价值上都是相等的,数量是无穷的。
聪明得你,能不能考虑到箱子的大小、每种宝石的价值和大小,计算出我们的勇士小明能带回的宝藏的最大价值。
输入输出格式
输入格式
输入只有一行,包含五个整数 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