Cod sursa(job #635680)

Utilizator swift90Ionut Bogdanescu swift90 Data 19 noiembrie 2011 14:07:18
Problema Portal3 Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 0.95 kb
#include<cstdio>
using namespace std;
long long X[6],Y[6],C[3],sol[10],viz[10],N,M,S;
inline long long modul(long long a){
	if(a<0)
		return -a;
	return a;
}
void calc(int k){
	if(!k)
		return;
	long long dist=X[2*sol[0]]+Y[2*sol[0]];
	for(int i=0;i<k;++i){
		dist+=C[sol[i]];
		if(i)
			dist+=modul(X[2*sol[i]]-X[2*sol[i-1]+1])+modul(Y[2*sol[i]]-Y[2*sol[i-1]+1]);
	}
	dist+=N-X[2*sol[k-1]+1]+M-Y[2*sol[k-1]+1];
	if(dist<S)
		S=dist;
}
void back(int k){
	calc(k);
	for(int i=0;i<3;++i){
		if(!viz[i]){
			viz[i]=1;
			sol[k]=i;
			back(k+1);
			viz[i]=0;
		}
	}
}
void solve(){
	int i;
	scanf("%lld%lld",&N,&M);
	for(i=0;i<6;i+=2)
		scanf("%lld%lld%lld%lld%lld",&X[i],&Y[i],&X[i+1],&Y[i+1],&C[i>>1]);
	S=N+M;
	back(0);
	printf("%lld\n",S);
}
int main(){
	freopen("portal3.in","r",stdin);
	freopen("portal3.out","w",stdout);
	int T;
	scanf("%d",&T);
	for(;T;--T)
		solve();
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}