标签:
| Time Limit: 2000MS | Memory Limit: 65536K | |
| Total Submissions: 19510 | Accepted: 7525 | 
Description
Input
Output
Sample Input
4 aaaaaaa baaaaaa abaaaaa aabaaaa 0
Sample Output
The highest possible quality is 1/3.
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<cstdlib>
#include<algorithm>
using namespace std;
#define INF 0x7fffffff
int n,a[2010][2010],vis[2010],low[2010];
char s[2010][7];
int fun(char a[],char b[])
{
      int sum=0;
      for(int i=0;i<7;i++)
            if(a[i]!=b[i])
                  sum++;
      return sum;
}
int prim()
{
      int minn,pos,ans=0;
      memset(vis,0,sizeof(vis));
      vis[0]=1;
      pos=0;
      for(int i=0;i<n;i++)
      {
            if(i!=pos)
            {
                  low[i]=a[pos][i];
            }
      }
      for(int i=1;i<n;i++)
      {
            minn=INF;
            for(int j=0;j<n;j++)
            {
                  if(!vis[j]&&low[j]<minn)
                  {
                        pos=j;
                        minn=low[j];
                  }
            }
            ans+=minn;
            vis[pos]=1;
            for(int j=0;j<n;j++)
            {
                  if(!vis[j]&&low[j]>a[pos][j])
                        low[j]=a[pos][j];
            }
      }
      return ans;
}
int main()
{
      while(scanf("%d",&n)!=EOF)
      {
           if(n==0) break;
           for(int i=0;i<n;i++)
                  scanf("%s",s[i]);
           for(int i=0;i<n;i++)
                  for(int j=i+1;j<n;j++)
                  {
                        a[i][j]=a[j][i]=fun(s[i],s[j]);
                  }
           printf("The highest possible quality is 1/%d.\n",prim());
      }
      return 0;
}
标签:
原文地址:http://www.cnblogs.com/a972290869/p/4262079.html