BZOJ2490 Zombie’s Treasure Chest

时间:2023-03-10 04:08:28
BZOJ2490 Zombie’s Treasure Chest

如果n = lcm(s1, s2),那么就可以直接得到maxV = (v / s1 * v1, v / s2 *v2)

然后还剩下一点体积我们暴力枚举用s1的量,让s1为max(s1, s2)可以减少枚举次数。。。然后就做完了QAQ

 /**************************************************************
Problem: 2490
User: rausen
Language: C++
Result: Accepted
Time:4 ms
Memory:804 kb
****************************************************************/ #include <cstdio>
#include <algorithm> using namespace std;
typedef long long ll; ll v, s1, s2, v1, v2;
ll ans, del; int main() {
int T, icase, i;
ll t, tmp;
scanf("%d", &T);
for (icase = ; icase <= T; ++icase) {
scanf("%lld%lld%lld%lld%lld", &v, &s1, &v1, &s2, &v2);
if (s1 < s2) swap(s1, s2), swap(v1, v2);
tmp = s1 * s2 / __gcd(s1, s2), t = v / tmp;
v = v % tmp;
if (t) --t, v += tmp;
ans = max(t * (tmp / s1) * v1, t * (tmp / s2) * v2);
for (i = del = ; i <= v / s1; ++i)
del = max(del, i * v1 + (v - i * s1) / s2 * v2);
printf("Case #%d: %lld\n", icase, ans + del);
}
return ;
}