Codeforces 526C.Om Nom and Candies
Posted letri
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 526C.Om Nom and Candies相关的知识,希望对你有一定的参考价值。
一个只有两个物品的背包问题,但是范围都是1e9,需要考虑根号或者log的复杂度。
如果这两个物品中的某一个花费超过了根号C,那么我们可以直接枚举这件物品的数量,另一件物品的数量可以计算得出。
若没有
假设 v1/c1>v2/c2 也就是v1*c2>v2*c1
假设第一件物品有c2件,也就是耗费了c1*c2的空间得到了v1*c2的价值,若用这c1*c2的空间选c1个价值为v2的物品,根据上面的不等式可以看出这是不忧的。
所以第二件物品的数量不会超过c1件。
#include<complex> #include<cstdio> using namespace std; long long m,c1,c2,v1,v2,ans; int main() { scanf("%d%d%d%d%d",&m,&v1,&v2,&c1,&c2); if(c2>c1)swap(c1,c2),swap(v1,v2); if(c1>=sqrt(m)) for(int i=0;i*c1<=m;i++) ans=max(ans,i*v1+(m-i*c1)/c2*v2); else { if(v1*c2<v2*c1)swap(c1,c2),swap(v1,v2); for(int i=0;i<c1 && i*c2<=m;i++) ans=max(ans,i*v2+(m-i*c2)/c1*v1); } printf("%lld ",ans); return 0; }
以上是关于Codeforces 526C.Om Nom and Candies的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 526D Om Nom and Necklace (KMP)
Codeforces Round #526 C - The Fair Nut and String /// 组合递推
Codeforces Round #526 (Div. 1)