Pagini recente » Cod sursa (job #2363419) | Cod sursa (job #1144504) | Cod sursa (job #1031779) | Cod sursa (job #1636072) | Cod sursa (job #1653024)
#include <stdio.h>
#include <algorithm>
using namespace std;
struct date { int x,y; };
int tip,n;
int dp[20][1<<18];
date v[20];
int sqr(int x) { return x*x; }
int dist(int x,int y)
{
return sqr(v[x].x-v[y].x)+sqr(v[x].y-v[y].y);
}
int memo(int nod,int mask)
{
if (mask==(1<<n)-1) return 0;
if (dp[nod][mask]!=2e9) return dp[nod][mask];
int sol=2e9;
for (int i=1;i<=n;i++)
if (((mask>>(i-1))&1)==0) sol=min(sol,memo(i,mask+(1<<(i-1)))+dist(nod,i));
return dp[nod][mask]=sol;
}
int main()
{
freopen("bibel.in","r",stdin);
freopen("bibel.out","w",stdout);
n=1; v[1].x=v[1].y=0;
while (1) {
scanf("%d",&tip);
if (tip==0) { n++; scanf("%d %d",&v[n].x,&v[n].y); } else
if (tip==1) {
for (int i=1;i<=n;i++)
for (int j=0;j<1<<n;j++)
dp[i][j]=2e9;
dp[1][1]=memo(1,1);
printf("%d\n",dp[1][1]);
n=1;
}
if (tip==2) return 0;
}
return 0;
}