51nod1548 歐姆諾姆和糖果

chenfy27發表於2024-10-07

有紅藍兩種糖果,紅色糖果每顆重wr克,甜度為hr;藍色糖果每顆重wb克,甜度為hb;有容量為C克的盒子,求能裝下的最大甜度。
1<=C,hr,hb,wr,wb<=1E9

分析:記S=lcm(wr,wb),那麼對於S克容量,可以裝S/wr顆藍色糖果,也可以裝S/wb顆紅色糖果,甜度分別為S*hb/wrS*hr/wb,應該選甜度更大的。因此在列舉時,紅色糖果數只需要列舉[0,wb),藍色糖果數只需要列舉[0,wr),應該選擇範圍更小的進行列舉。另外列舉範圍也不會超過C/max(wr,wb),最壞情況是wr和wb取sqrt(C)。

#include <bits/stdc++.h>
using i64 = long long;

void solve() {
	i64 C, hr, hb, wr, wb;
	std::cin >> C >> hr >> hb >> wr >> wb;

	i64 ans = 0;
	for (i64 i = 0; i * i <= C; i++) {
		if (i * wr <= C) {
			ans = std::max(ans, i * hr + (C - i * wr) / wb * hb);
		}
		if (i * wb <= C) {
			ans = std::max(ans, i * hb + (C - i * wb) / wr * hr);
		}
	}
	std::cout << ans << "\n";
}

int main() {
	std::cin.tie(0)->sync_with_stdio(0);
	int t = 1;
	while (t--) solve();
	return 0;
}

相關文章