大致就是广搜加个记忆化搜索打个表
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
int a[3],b[3],c[3];
int d[105][105][105];
int minsum;
void bfs(int t)
{
int i;
// for(i=0;i<3;i++) cout<<c[i]<<' '; cout<<' '<<t<<endl;
for(i=0;i<3;i++)
{
if(c[i]!=b[i]) break;
}
if(i==3)
{
if(t<minsum) minsum=t;
return ;
}
for(i=0;i<3;i++)
{
for(int j=0;j<3;j++)
{
if(j==i) continue;
if(c[j]<a[j])
{
int tt[3];
int x;
for(int k=0;k<3;k++) tt[k]=c[k];
if(c[i]-(a[j]-c[j])>=0)
{
c[i]=c[i]-(a[j]-c[j]); x=a[j]-c[j];
}
else
{
x=c[i];
c[i]=0;
}
c[j]+=x;
if(d[c[0]][c[1]][c[2]]>t)
{
d[c[0]][c[1]][c[2]]=t;
bfs(t+1);
}
for(int k=0;k<3;k++) c[k]=tt[k];
}
}
}
}
int main()
{
int t;
cin>>t;
while(t--)
{
minsum=10000000;
int i;
memset(d,1000000,sizeof(d));
// cout<<d[0][0][0]<<endl;
memset(c,0,sizeof(c));
for(i=0;i<3;i++) cin>>a[i];
for(i=0;i<3;i++) cin>>b[i];
c[0]=a[0];
bfs(0);
if(minsum!=10000000) cout<<minsum<<endl;
else cout<<"-1"<<endl;
}
}