Pagini recente » Cod sursa (job #2249875) | Cod sursa (job #2641079) | Cod sursa (job #465992) | Cod sursa (job #538112) | Cod sursa (job #636329)
Cod sursa(job #636329)
# include <fstream>
# define min(a,b) (a<b?a:b)
# define ll long long
using namespace std;
ll n, m, x[10], y[10], c[5], sol, w[10], v[10];
inline int comp(int i)
{
if (i==1)return 2;
if (i==2)return 1;
if (i==3)return 4;
if (i==4)return 3;
if (i==5)return 6;
return 5;
}
inline ll abs (ll x)
{
if (x<0)return -x;
return x;
}
void calc (int k)
{
int d=x[w[1]]+y[w[1]]+n-x[w[k]]+m-y[w[k]];
for(int i=1;i<=k;++i)
{
if (w[i]%2==0)
d+=c[w[i]/2];
if (i%2==0 && i<k)
d+=abs(x[w[i]]-x[w[i+1]])+abs(y[w[i]]-y[w[i+1]]);
}
sol=min(sol,d);
}
void bk (int k)
{
for(int i=1;i<7;++i)
if (!v[i])
{
w[k]=i;
w[k+1]=comp(i);
calc(k+1);
if (k<5)
{
v[i]=1;
v[w[k+1]]=1;
bk(k+2);
v[i]=0;
v[w[k+1]]=0;
}
}
}
int main ()
{
ifstream fin ("portal3.in");
freopen("portal3.out", "w", stdout);
int t;
fin>>t;
for(;t--;)
{
fin>>n>>m;
for(int i=1;i<4;++i)
fin>>x[2*i-1]>>y[2*i-1]>>x[2*i]>>y[2*i]>>c[i];
sol=n+m;
bk(1);
printf("%d\n", sol);
}
return 0;
}