Pagini recente » Cod sursa (job #1170133) | Cod sursa (job #948580) | Cod sursa (job #753949) | Cod sursa (job #2369981) | Cod sursa (job #2216184)
#include<fstream>
#define INF 1000000000
using namespace std;
ifstream fi("bibel.in");
ofstream fo("bibel.out");
int n,pn,x,Dp[131077][25],i,j,k,rez,X[25],Y[25],Xp[25],Yp[25],DPrv[25];
int dist(int x, int y, int xx, int yy)
{
return ((x-xx)*(x-xx)+(y-yy)*(y-yy));
}
int main()
{
pn=1;
while(1)
{
fi>>x;
if(x==0)
{
n++;
fi>>X[n]>>Y[n];
}
if(x==1)
{
for(i=1; i<(1<<n); i++)
for(j=1; j<=n; j++)
Dp[i][j]=INF;
for(i=1; i<=pn; i++)
for(j=1; j<=n; j++)
Dp[(1<<(j-1))][j]=min(Dp[(1<<(j-1))][j],DPrv[i]+dist(Xp[i],Yp[i],X[j],Y[j]));
for(i=1; i<(1<<n); i++)
for(j=1; j<=n; j++)
if(i&(1<<(j-1)))
for(k=1; k<=n; k++)
if(k!=j && (i&(1<<(k-1))))
Dp[i][j]=min(Dp[i][j],Dp[i^(1<<(j-1))][k]+dist(X[j],Y[j],X[k],Y[k]));
rez=INF;
for(i=1; i<=n; i++)
{
rez=min(rez,Dp[(1<<n)-1][i]);
DPrv[i]=Dp[(1<<n)-1][i];
Xp[i]=X[i];
Yp[i]=Y[i];
}
pn=n;
n=0;
fo<<rez<<"\n";
}
if(x==2)
break;
}
fi.close();
fo.close();
return 0;
}