Pagini recente » Autentificare | Cod sursa (job #1807897) | Cod sursa (job #2990952) | Cod sursa (job #1715074) | Cod sursa (job #1501868)
#include <cstdio>
#define INF 1000000000000000LL
#define k 6
long long x1[k], x2[k], y1[k], y2[k], c[k], d[1<<k][k], best[k];
inline long long myabs(long long a){
if(a<0){
return -a;
}
return a;
}
int main(){
int i, t, j, p;
long long n, m, ans;
FILE *fin, *fout;
fin=fopen("portal3.in", "r");
fout=fopen("portal3.out", "w");
fscanf(fin, "%d", &t);
for(; t; t--){
fscanf(fin, "%lld%lld", &n, &m);
for(i=0; i<k/2; i++){
fscanf(fin, "%lld%lld%lld%lld%lld", &x1[i], &y1[i], &x2[i], &y2[i], &c[i]);
best[i]=INF;
}
for(i=k/2; i<k; i++){
x1[i]=x2[i-k/2];
y1[i]=y2[i-k/2];
x2[i]=x1[i-k/2];
y2[i]=y1[i-k/2];
c[i]=c[i-k/2];
best[i]=INF;
}
for(i=1; i<(1<<k); i++){
for(j=0; j<k; j++){
if(i&(1<<j)){
if(i==(1<<j)){
d[i][j]=c[j]+x1[j]+y1[j];
}else{
d[i][j]=INF;
for(p=0; p<k; p++){
if((p!=j)&&(i&(1<<p))&&(d[i][j]>c[j]+d[i^(1<<j)][p]+myabs(x2[p]-x1[j])+myabs(y2[p]-y1[j]))){
d[i][j]=c[j]+d[i^(1<<j)][p]+myabs(x2[p]-x1[j])+myabs(y2[p]-y1[j]);
}
}
}
if(best[j]>d[i][j]){
best[j]=d[i][j];
}
}else{
d[i][j]=INF;
}
}
}
ans=n+m;
for(i=0; i<k; i++){
if(ans>best[i]+myabs(n-x2[i])+myabs(m-y2[i])){
ans=best[i]+myabs(n-x2[i])+myabs(m-y2[i]);
}
}
fprintf(fout, "%lld\n", ans);
}
fclose(fin);
fclose(fout);
return 0;
}