目录
牛客_游游的水果大礼包
题目解析
C++代码
Java代码
牛客_游游的水果大礼包
游游的水果大礼包 (nowcoder.com)
描述:
游游有n个苹果,m个桃子。她可以把2个苹果和1个桃子组成价值a元的一号水果大礼包,也可以把1个苹果和2个桃子组成价值b元的二号水果大礼包。游游想知道,自己最多能组成多少价值总和的大礼包?
题目解析
需要注意的是贪心是错的。 正确的解法应该是枚举所有的情况。
C++代码
#include <iostream>
using namespace std;
#define int long long
signed main()
{
int n = 0, m = 0, a = 0, b = 0;
cin >> n >> m >> a >> b;
int res = 0;
// 2x + 3y = ? 条件太少就枚举
for(int x = 0; x <= min(n / 2, m); ++x) // 枚举x
{
int y = min(n - 2 * x, (m - x) / 2);
res = max(res, a * x + b * y);
}
cout << res << endl;
return 0;
}
Java代码
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
long n = in.nextInt();
long m = in.nextInt();
long a = in.nextInt();
long b = in.nextInt();
long ret = 0;
for(long x = 0; x <= Math.min(n / 2, m); x++) // 枚举 1 号礼包的个数
{
long y = Math.min(n - x * 2, (m - x) / 2); // 计算 2 号礼包的个数
ret = Math.max(ret, a * x + b * y);
}
System.out.println(ret);
}
}