题目链接:
http://poj.org/problem?id=1789
输入输出:
4 aaaaaaa baaaaaa abaaaaa aabaaaa 0
The highest possible quality is 1/3.
代码:
#include<stdio.h>//454ms
#include<iostream>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
#define maxv 2010
#define inf 99999999
int v,cost[maxv][maxv],mincost[maxv],sum;
bool used[maxv];
char s[maxv][9];
int prim(){
for(int i=0;i<v;++i){
mincost[i]=inf;
used[i]=0;
}
mincost[0]=0;
int res=0;
while(1){
int j=-1;
for(int i=0;i<v;++i){
if(!used[i]&&(mincost[i]<mincost[j]||j==-1)) j=i;
}
if(j==-1) break;
used[j]=1;
res+=mincost[j];
for(int i=0;i<v;++i){
mincost[i]=min(mincost[i],cost[j][i]);
}
}
return res;
}
int main(){
while(scanf("%d",&v),v){
for(int i=0;i<v;++i){
scanf("%s",s[i]);
for(int j=0;j<i;++j){
sum=0;
for(int k=0;k<7;++k){
if(s[i][k]!=s[j][k]) ++sum;
}
cost[i][j]=cost[j][i]=sum;
}
}
printf("The highest possible quality is 1/%d.\n",prim());
}
return 0;
}