Pagini recente » Cod sursa (job #2364169) | Cod sursa (job #1796899) | Cod sursa (job #1630489) | Cod sursa (job #2854849) | Cod sursa (job #635525)
Cod sursa(job #635525)
using namespace std;
#include<fstream>
#include<cstring>
int N, M;
int Dx[4], Dy[4];
int Sx[4], Sy[4], C[4];
int sol = -1, st[4], viz[4], K, state;
void solve()
{
int x = 0, y = 0, cst = 0;
for( int i = 1; i <= K; ++i )
{
if( state & ( 1 << (i-1) ) )
{
cst += abs( x - Dx[st[i]] ) + abs( y - Dy[st[i]] );
cst += C[st[i]];
x = Sx[st[i]]; y = Sy[st[i]];
}
else
{
cst += abs( x - Sx[st[i]] ) + abs( y - Sy[st[i]] );
cst += C[st[i]];
x = Dx[st[i]]; y = Dy[st[i]];
}
}
cst += abs( N - x ) + abs( M - y );
if( sol == -1 || sol > cst ) sol = cst;
}
void aranj( int k )
{
if( k == K + 1 )
{
for(int i = 0; i < (1<<K); ++i)
{
state = i;
solve();
}
}
else
for(int i = 1; i <= 3; ++i)
if( !viz[i] )
{
st[k] = i;
viz[i] = 1;
aranj(k+1);
viz[i] = 0;
}
}
int main()
{
ifstream in("portal3.in"); ofstream out("portal3.out");
int T;
in >> T;
for(;T;--T)
{
in >> N >> M;
for(int i = 1; i <= 3; ++i)
in >> Sx[i] >> Sy[i] >> Dx[i] >> Dy[i] >> C[i];
sol = -1;
for(int i = 1; i <= 3; ++i)
{
K = i;
aranj(1);
}
out << sol << "\n";
}
return 0;
}