CF526C Om Nom and Candies(思维)
题意:
可爱的小怪物Om Nom非常喜欢糖果。有一天,他发现自己处在一个相当棘手的境地,需要他多想一点,才能最享受糖果。如果您在他的位置上,您会成功完成相同的任务吗?
有一天,当他去找朋友埃文(Evan)时,Om Nom在家中找不到他,但他发现了两个带糖果的袋子。第一个装满蓝色糖果,第二个装满红色糖果。 Om Nom知道每个红色糖果的重量为Wr克,每个蓝色糖果的重量为Wb克。吃一个红色的糖果会给Om Nom Hr带来欢乐,而吃一个蓝色的糖果会给Om Nom Hb带来欢乐。
糖果是世界上最重要的事情,但另一方面,暴饮暴食也不是一件好事。 Om Nom知道如果他吃的糖超过C克,他就会生病。欧姆·诺姆(Om Nom)认为留下糖果剩菜不适当,因此他只能吃整个糖果。 Om Nom是一位出色的数学家,他迅速确定了应该吃多少种糖果才能获得最大数量的喜悦单位。你能重复他的成就吗?您可以假设每个袋子包含更多Om Nom可以吃的糖果。
输入项
单行包含五个整数C,Hr,Hb,Wr,Wb(1≤C,Hr,Hb,Wr,Wb≤109)。
输出量
打印一个整数-Om Nom可以获取的最大喜悦单位数。
题解:
#include<bits/stdc++.h> using namespace std; const int maxn=1010; typedef long long ll; ll c,hr,hb,wr,wb; ll check (ll x) { if (x*wr>c) return 0; ll tt=x*hr+(c-x*wr)/wb*hb; return tt; } ll check1 (ll x) { if (x*wb>c) return 0; ll tt=x*hb+(c-x*wb)/wr*hr; return tt; } int main () { cin>>c>>hr>>hb>>wr>>wb; ll l=0; ll r=c/wr; ll ans=0; //printf("%lld %lld\n",l,r); for (ll i=0;i<=1e5;i++) { ans=max(ans,check(i)); ans=max(ans,check1(i)); } printf("%lld\n",ans); }