链接:https://ac.nowcoder.com/acm/contest/61570/C 来源:牛客网 游游有 � n个苹果, � m个桃子。她可以把2个苹果和1个桃子组成价值 � a元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值 � b元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?
时间: 2024-04-17 07:28:18 浏览: 63
根据题目描述,游游有n个苹果和m个桃子,可以组成两种不同价值的大礼包。一种是价值a元的一号水果大礼包,由2个苹果和1个桃子组成;另一种是价值b元的二号水果大礼包,由1个苹果和2个桃子组成。现在游游想知道,她最多能组成多少价值总和的大礼包。
我们可以通过贪心算法来解决这个问题。贪心算法的思路是每次选择能得到最大价值的大礼包组合,直到无法再选择。
首先,我们可以先尽可能多地选择一号水果大礼包。每次选择一号水果大礼包时,我们可以消耗掉2个苹果和1个桃子,并获得价值a元。如果剩余的苹果数量小于2或者剩余的桃子数量小于1,就无法再选择一号水果大礼包了。
接下来,如果还有剩余的苹果或者桃子,我们可以选择二号水果大礼包。每次选择二号水果大礼包时,我们可以消耗掉1个苹果和2个桃子,并获得价值b元。如果剩余的苹果数量小于1或者剩余的桃子数量小于2,就无法再选择二号水果大礼包了。
最后,游游能够得到的最大价值总和的大礼包就是选择一号水果大礼包的次数乘以a,再加上选择二号水果大礼包的次数乘以b。
具体的实现可以参考下面的代码:
```cpp
#include <iostream>
using namespace std;
int main() {
int n, m, a, b;
cin >> n >> m >> a >> b;
int maxPackage = 0;
// 尽可能多地选择一号水果大礼包
while (n >= 2 && m >= 1) {
maxPackage++;
n -= 2;
m -= 1;
}
// 尽可能多地选择二号水果大礼包
while (n >= 1 && m >= 2) {
maxPackage++;
n -= 1;
m -= 2;
}
int maxTotalValue = maxPackage * max(a, b);
cout << maxTotalValue << endl;
return 0;
}
```
希望能帮到你!如果还有其他问题,请随时提问。
阅读全文