游游的水果大礼包

思路:

假设苹果有n个,桃有m个

然后有1号和2号两个人

1号取价值为a元的礼包x个,2号取价值为b元的礼包y个,那么最多可以组成 ax + by的价值总和,由于x个礼包一次消耗两个苹果,一个桃,y个礼包一次消耗一个苹果两个桃。

故易知x的范围为[ 0, min(n/2, m) ],y 的范围为 min[n - 2x,(m-x)/2],则我们就可以通过枚举来算出该结果。

同理我们可以把上面的枚举归类为一种题型,当要求ax + by时,已知x的范围,以及 y = f(x),那么可以用一层for循环n次,来枚举到。

#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;

typedef long long ll;

int main()
{
	ll n, m, a, b, res = 0;
	cin >> n >> m >> a >> b;
	//枚举
	for (int x = 0; x <= min(n / 2, m); x++) //枚举一号礼包的个数
	{
		int y = min(n - x * 2, (m - x) / 2); //枚举二号礼包的数量
		res = max(res, a * x + b * y);
	}
	cout << res << endl;

	return 0;
}

}

全部评论

相关推荐

05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
评论
3
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务