题意
有两种糖果,给出每种糖果的重量 \(w_r,w_b\) 和吃掉一颗获得的快乐值 \(h_r,h_b\)。
你最多可以吃 \(c\) 重量的糖果,求最大可获得的快乐值。
分析
看前面很多 dalao 都用了一些很强的算法,我只能来水一发 \(O(\sqrt n)\) 的暴力。
考虑枚举每种糖果吃掉的数量,但是时间复杂度最大可到 \(10^9\),明显过不了。
我们发现,若吃红糖 \(i\) 颗,那么可吃蓝糖 \((c-i\times w_r)\div w_b\) 颗,反之亦然。
所以只要在枚举时考虑两种情况,可以在枚举 \(1\sim\sqrt n\) 时同时计算 \(\sqrt n\sim n\) 的值。
所以就直接打一个循环暴力水过,时间复杂度 \(O(\sqrt n)\)。
Code
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
inline ll read(){ll x=0,f=1;char c=getchar();while(c<48||c>57){if(c==45)f=0;c=getchar();}while(c>47&&c<58)x=(x<<3)+(x<<1)+(c^48),c=getchar();return f?x:-x;}
ll c,hr,hb,wr,wb,ans;
signed main(){
c=read(),hr=read(),hb=read(),wr=read(),wb=read();
for(ll i=0;i<=sqrt(c);++i){
if(i*wr<c){
ans=max(ans,i*hr+(c-i*wr)/wb*hb);
}
if(i*wb<c){
ans=max(ans,i*hb+(c-i*wb)/wr*hr);
}
}
printf("%lld",ans);
}
标签:Nom,Om,Candies,ll,sqrt,枚举,糖果,复杂度
From: https://www.cnblogs.com/run-away/p/18089596