#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<queue>
#include<cmath>
#include<ctime>
#include<algorithm>
#define eps 1e-14
#define pi acos(-1)
#define ll long long
#define RD T*(rand()*2-RAND_MAX)
#define Drand (long double)rand()/RAND_MAX
#define INF 0x3f3f3f3f
using namespace std;
const int maxn=1e5+10;
struct nn
{
ll gg,mm,cp,cost;
nn(){gg=0;mm=0;cp=0;cost=0;}
nn(ll gg,ll mm,ll cp,ll cost):gg(gg),mm(mm),cp(cp),cost(cost){}
friend bool operator < (nn a,nn b)
{
return a.cost>b.cost;
}
};
ll n,m,k,a,b,c;
priority_queue<nn>q;
ll bfs(nn st)
{
while(!q.empty())q.pop();
q.push(st);
ll ans=1e18;
while(!q.empty()){
nn now=q.top();
q.pop();
if(now.gg==0 && now.mm==0 && now.cp==0){
ans=min(now.cost,ans);
continue;
}
if(now.cost>ans)continue;
// cout<<now.gg<<" "<<now.mm<<" "<<now.cp<<" "<<now.cost<<endl;
nn nex=now;
if(now.gg>0){
nex.gg>=2 ? nex.gg-=2 : nex.gg=0;
nex.cost+=a;
if(now.cost<ans)q.push(nex);
nex=now;
nex.gg>=3 ? nex.gg-=3 : nex.gg=0;
nex.cost+=b;
if(now.cost<ans)q.push(nex);
}
nex=now;
if(now.mm>0){
nex.mm>=2 ? nex.mm-=2 : nex.mm=0;
nex.cost+=a;
if(now.cost<ans)q.push(nex);
nex=now;
nex.mm>=3 ? nex.mm-=3 : nex.mm=0;
nex.cost+=b;
if(now.cost<ans)q.push(nex);
}
nex=now;
if(now.cp>0){
nex.cp--;
nex.cost+=c;
if(now.cost<ans)q.push(nex);
nex=now;
nex.gg++; nex.mm++; nex.cp--;
if(now.cost<ans)q.push(nex);
}
}
return ans;
}
ll min(ll a,ll b,ll c,ll d)
{
ll ans=min(a,b);
ans=min(ans,c);
ans=min(ans,d);
return ans;
}
int main()
{
// freopen("in1.txt","r",stdin);
int t;
scanf("%d",&t);
while(t--){
scanf("%lld %lld %lld %lld %lld %lld",&n,&m,&k,&a,&b,&c);
ll a1=a*3,a2=b*2,a3=c*3;
ll dif=3;
dif=min(n,m,k,dif);
n-=dif;
m-=dif;
k-=dif;
ll sma=min(a1,a2,a3,1e18);
nn stt;
if(sma==a1){
nn st(n%2,m%2,k%2,n/2*a+m/2*a+k/2*2*a);
stt=st;
}
else if(sma==a2){
nn st(n%3,m%3,k%3,n/3*b+m/3*b+k/3*2*b);
stt=st;
}
else if(sma==a3 && a1<=a2){
nn st(n%2,m%2,0,n/2*a+m/2*a+k*c);
stt=st;
}
else if(sma==a3 && a1>a2){
nn st(n%3,m%3,0,n/3*b+m/3*b+k*c);
stt=st;
}
stt.gg+=dif; stt.mm+=dif; stt.cp+=dif;
cout<<bfs(stt)<<endl;
}
return 0;
}
ccpc - 2050 hdu 6492 分宿舍 (暴力bfs)
最新推荐文章于 2019-08-21 17:30:24 发布