题意:一个汉堡包需要由2个小面包+1个小的牛排组成,一个鸡肉汉堡需要由2个小面包+1个小鸡肉排组成;
现在给你了小面包数b,小牛排数p,小鸡肉排数f,已知一个汉堡包和一个鸡肉汉堡包的单价分别为h,c;
问:怎么组合小面包和小牛排和小鸡肉排才能使得卖的价值最大;
其实这个就很明显了,肯定拿尽可能多的材料组成单价最高的涩;
所以开头比较单价,然后去用材料组成对应的汉堡,然后再把剩下的材料拿去组成另一个汉堡;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main(){
ll T,ans;
ll b,p,f,h,c;
scanf("%lld",&T);
while(T--){
ans=0;
scanf("%lld %lld %lld %lld %lld",&b,&p,&f,&h,&c);
if(h>c){//如果第一个单价高,那么就把材料用来做第一个
if(2*p>b){//因为它们的数量比为2:1,所以看那个相对更多;然后用少的去对应
ans+=b/2*h;//个数*单价
b-=b/2*2;//剩余的b的数量
if(b>1){//如果剩余的数量>=2才能拿来组成第二个
if(2*f>b){//同理上面的2p>b理解
ans+=b/2*c;
}else{
ans+=f*c;
}
}
}else{//如果2p<=b,说明p可以用完,b还有多余
ans+=p*h;
b-=2*p;
if(b>1){
if(2*f>b){
ans+=b/2*c;
}else{
ans+=f*c;
}
}
}
}else{//这里就是复制一边,改一下对应单价+对应的f,p
if(2*f>b){
ans+=b/2*c;
b-=b/2*2;
if(b>1){
if(2*p>b){
ans+=b/2*h;
}else{
ans+=p*h;
}
}
}else{
ans+=f*c;
b-=2*f;
if(b>1){
if(2*p>b){
ans+=b/2*h;
}else{
ans+=p*h;
}
}
}
}
printf("%lld\n",ans);
}
return 0;
}