首页 > 代码库 > Codeforces C - Om Nom and Candies
Codeforces C - Om Nom and Candies
C - Om Nom and Candies
思路:贪心+思维(或者叫数学)。假设最大值max(wr,wb)为wr,当c/wr小于√c时,可以枚举r糖的数量(从0到c/wr),更新答案,复杂度√c;否则,假设hr/wr<hb/wr,得到hr*wb<hb*wr,由这个等式可知,在有wb*wr重量限制的情况下,买wb个r糖没有买wr个b糖划算,当需要买超过wb个r糖时,不如去买b糖,可以枚举r糖的数量(从0到wb-1),更新答案,复杂度√c。
代码:
#include<bits/stdc++.h> using namespace std; #define ll long long const int N=1e5+5; const int INF=0x3f3f3f3f; int main() { ll c,hr,hb,wr,wb; cin>>c>>hr>>hb>>wr>>wb; if(wr<=wb)swap(wr,wb),swap(hr,hb); ll n=c/wr; ll ans=0; if(n<=sqrt(c)) { for(ll i=0;i<=n;i++) { ll temp=c-i*wr; ll j=temp/wb; ans=max(ans,(ll)i*hr+(ll)j*hb); } } else { if(hr*wb>=hb*wr)swap(wr,wb),swap(hr,hb); for(ll i=0;i<wb;i++) { ll temp=c-i*wr; ll j=temp/wb; ans=max(ans,i*hr+j*hb); } } cout<<ans<<endl; return 0; }
Codeforces C - Om Nom and Candies
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。