শুক্রবার, ২৮ জুন, ২০১৯

UVA 10911 - Forming Quiz Teams

#include <bits/stdc++.h>
using namespace std;
int mx,n,x[20],y[20];
double dist[20][20],dp[1<<16];
double call(int pos)
{
    if(pos==mx)
        return 0;
    else if(dp[pos]!=-1)
        return dp[pos];
    else
    {
        int i,j;
        double d=1<<30;
        for(i = 0; i<2*n; i++)
        {
            if(!(pos&(1<<i)))
            {
                for(j=i+1; j<2*n; j++)
                {
                    if(!(pos&(1<<j)))
                    {
                        d = min(d,dist[i][j]+call(pos|(1<<i)|(1<<j)));
                    }
                }
            }
        }
        return dp[pos]=d;
    }
}
double dis(int i, int j)
{
    return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}

int main()
{
    char name[20];
    int i,j,cs=1;
    scanf("%d",&n);
    while(n)
    {
        mx = (1<<(2*n))-1;
        for(i=0; i<2*n; i++)
            scanf("%s %d %d",name,x+i,y+i);
        for(i=0; i<2*n; i++)
            for(j=i+1; j<2*n; j++)
                dist[i][j]=dist[j][i]=dis(i,j);
        for(i=0; i<=mx; i++)
            dp[i]=-1;
        printf("Case %d: %.2lf\n",cs++,call(0));
        scanf("%d",&n);
    }
    return 0;
}

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন

Factorization with prime Sieve

vector <int> prime; char sieve[1000009]; int N=1000009; void primeSieve ( ) { sieve[0] = sieve[1] = 1; prime.push_back(2); ...