poj 1789
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
char c[2001][8];
int map[2001][2001];
int ok(int s,int t){
int j=0;
for(int i=0;i<7;i++)
{
if(c[s][i]!=c[t][i])
j++;
}
return j;
}
int d[2001];
int v[2001];
int n;
void solve(){
int i,j,k;
for(i=1;i<=n;i++)
d[i]=map[1][i];
memset(v,0,sizeof(v));
int ans=0;
while(1){
j=-1;k=1000000;
for(i=1;i<=n;i++)
if(v[i]==0&&k>d[i])
{
k=d[i];
j=i;
}
if(j==-1)
{
cout<<"The highest possible quality is 1/"<<ans<<"."<<endl;
return;
}
v[j]=1;
ans+=k;
for(i=1;i<=n;i++)
if(v[i]==0&&d[i]>map[j][i])
d[i]=map[j][i];
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n)
{
if(n==0) return;
for(i=1;i<=n;i++)
cin>>c[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
map[i][j]=ok(i,j);
map[j][i]=map[i][j];
}
solve();
}
}
int main(){
read();
return 0;
}
#include<fstream>
#include<queue>
using namespace std;
char c[2001][8];
int map[2001][2001];
int ok(int s,int t){
int j=0;
for(int i=0;i<7;i++)
{
if(c[s][i]!=c[t][i])
j++;
}
return j;
}
int d[2001];
int v[2001];
int n;
void solve(){
int i,j,k;
for(i=1;i<=n;i++)
d[i]=map[1][i];
memset(v,0,sizeof(v));
int ans=0;
while(1){
j=-1;k=1000000;
for(i=1;i<=n;i++)
if(v[i]==0&&k>d[i])
{
k=d[i];
j=i;
}
if(j==-1)
{
cout<<"The highest possible quality is 1/"<<ans<<"."<<endl;
return;
}
v[j]=1;
ans+=k;
for(i=1;i<=n;i++)
if(v[i]==0&&d[i]>map[j][i])
d[i]=map[j][i];
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n)
{
if(n==0) return;
for(i=1;i<=n;i++)
cin>>c[i];
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
map[i][j]=ok(i,j);
map[j][i]=map[i][j];
}
solve();
}
}
int main(){
read();
return 0;
}