题目描述
勇敢的小明来到一个失落的村庄。他非常幸运,找到了很多宝藏和一个空的大铁箱,但是失落的村庄里有很多愤怒的僵尸。小明非常勇敢,他决定打败僵尸,然后把所有的宝藏都带回来。一场旷日持久的残酷战斗从早到晚持续,最后小明发现僵尸是不死的,不可战胜的。
但是,这些宝藏不应该留在这里。不幸的是,由于大铁箱容量的限制,小明无法携带所有宝藏。村庄里的宝藏只有两种:祖母绿宝石和蓝宝石。所有的宝石在大小和价值上都是相等的,数量是无穷的。
聪明得你,能不能考虑到箱子的大小、每种宝石的价值和大小,计算出我们的勇士小明能带回的宝藏的最大价值。
输入输出格式
输入格式
输入只有一行,包含五个整数 N
,S1
,V1
,S2
,V2
,表示宝箱的大小为 N
,祖母绿宝石的大小和价值为 S1
和V1
,蓝宝石的大小和价值为 S2
和 V2
。所有整数都是正整数。整数之间以空格间隔。
输出格式
针对输入,打印出小明可以随身携带的所有宝藏的最大总值。
输入输出样例1
输入100 1 1 2 2
输出100
输入输出样例2
输入100 34 34 5 3
输出86
说明提示
1≤N≤100000
1.题目及思路分析:
- 这道题本身其实是弱化的01背包问题,我们只需要考虑两种情况
- 第一种先装绿宝石装到装不下,以后剩余的空间去装蓝宝石
- 第二种先先装蓝宝石装都装不下,以后剩余的空间去装绿宝石
- 然后我们比较这两种情况,哪一种的价值最大?输出即可
2.扩展知识:
(1)[int(i) for i in a]
这句话是将列表里的所有元素转换成整形,组成新的列表再返回。
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])//a[1])*a[2])#这一句就是判断那两种情况,哪一种的价值更大?
print(b)