10911

dp着往下搜就行,每次搜一对,不断更新;

但是一开始就是TLE。。。。不过有一点小剪枝一下就过了。。2.988s

//============================================================================
// Name        : 10911.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;


typedef struct{
	char name[100];
	double x, y;
}Node;

Node a[20];
double d[20][20];
int n;
int flag[20];
double ans;
long long num;

double dp(int m){
//	num++;
//	printf("%d :n ", m);
//	for(int i = 1;i <= 2*n;i++){
//		printf("%d ", flag[i]);
//	}
//	printf("\n");
	int t;
	double temp, curans;
	for(int i = 1;i <= 2*n;i++){
		if(flag[i] == 0){
			t = i;
			flag[i] = 1;
			break;
		}
	}
	if(m == n){
		for(int i = 1;i <= 2*n;i++){
			if(flag[i] == 0){
				temp = d[t][i];
//				printf("%.2lf\n", temp);
				flag[t] = 0;
				return temp;
			}
		}
	}
	int tag = 0;
	for(int i = 1;i <= 2*n;i++){
		if(flag[i] == 0&&tag == 0){
			tag = 1;
			flag[i] = 1;
			curans = d[t][i] + dp(m+1);
			flag[i] = 0;
		}
		else if(flag[i] == 0){
			if(d[t][i] > curans) continue;
			flag[i] = 1;
			temp = d[t][i] + dp(m+1);
			flag[i] = 0;
			if(temp < curans){
				curans =  temp;
			}
		}
	}
	flag[t] = 0;
	return curans;
}



int main() {
	freopen("a.txt", "r", stdin);
	int T = 0;
	while(scanf("%d", &n)&&n){
		T++;
		printf("Case %d: ", T);
		for(int i = 1;i <= 2*n;i++){
			scanf("%s", a[i].name);
			scanf("%lf%lf", &a[i].x, &a[i].y);
		}
		for(int i = 1;i <= 2*n;i++){
			for(int j = 1;j <= 2*n;j++){
				if(i == j){
					d[i][j] = 0.0;
				}
				else{
					d[i][j] = sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x)+(a[i].y-a[j].y)*(a[i].y-a[j].y));
				}
			}
		}
//		for(int i = 1;i <= 2*n;i++){
//			for(int j = 1;j <= 2*n;j++){
//				printf("%.2lf ", d[i][j]);
//			}
//			printf("\n");
//		}
		memset(flag, 0, sizeof(flag));
		ans = dp(1);
		printf("%.2lf\n", ans);
//		printf("%lld\n", num);
	}
	return 0;
}

  

posted @ 2011-07-25 22:37  KOKO's  阅读(291)  评论(0编辑  收藏  举报