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;
}

posted on 2011-06-02 10:26  宇宙吾心  阅读(237)  评论(0)    收藏  举报

导航