华为机试真题实战应用【赛题代码篇】-购买水果最便宜的方案(附Java和C++代码实现)

题目描述


小王手里有点闲钱,想着做点卖水果的小买卖,给出两个数组m、n,用m[i]表示第i个水果的成本价,n[i]表示第i个水果能卖出的价钱,假如现在有本钱k元,试问最后最多能赚多少钱?

说明:
1.每种水果只能买一次,只能卖一次;
2.数组m,n大小不超过50;
3.数组元素为正整数,不超过1000。

输入描述


1.数组m, n;
2.本钱k
备注:
1.首行输入逗号分隔的数组m的元素值
2.第二行输入逗号分隔数字n的元素值
3.第三行输入本钱

输出描述


最多能赚多少钱。

示例1
输入
4,2,6,4
5,3,8,7
15
输出
22

说明
样例计算过程:
先买前3种水果,全部卖出,再买第4种水果,再卖出,最后本金变为22。

知识储备

贪心、排序    100/中等

解题思路

我们直接枚举每个时间点,对于每个时间点选择在此时间点上供应水果的水果超市,再从这些水果超市中选择最便宜的价格,最后将每个时间点上的最低价格加起来就行了

  • 先计算每种水果的平均利润,即收益/本金,并按照从大到小排序,这里使用pair来将利润和水果index进行联系;
  • 再按照利润从大到小来买水果,若本金足够则买入,否则买下一个便宜的,并将已经买过的水果用visit标记;

你可能感兴趣的:(java,开发语言)