标签:
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 24724 | Accepted: 9636 |
Description
Input
Output
Sample Input
4 aaaaaaa baaaaaa abaaaaa aabaaaa 0
Sample Output
The highest possible quality is 1/3.
Source
#include <iostream> #include <cstdio> #include <cstdlib> #include <cmath> #include <algorithm> #include <climits> #include <cstring> #include <string> #include <set> #include <map> #include <queue> #include <stack> #include <vector> #include <list> #include<functional> #define mod 1000000007 #define inf 0x3f3f3f3f #define pi acos(-1.0) using namespace std; typedef long long ll; const int N=2005; const int M=15005; int edg[N][N]; int lowcost[N];//记录未加入树集合的i离树集合中元素最小的距离 char w[N][8]; int n,m,t; int fun(char *a,char *b) { int cnt=0; for(int k=0;k<7;k++){ if(a[k]!=b[k])cnt++; }return cnt; } void Build() { for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { edg[i][j]=edg[j][i]=fun(w[i],w[j]); } } } void prim() { int sum=0;lowcost[0]=-1; for(int i=1;i<n;i++){ lowcost[i]=edg[0][i]; } for(int i=1;i<n;i++){ int minn=inf,k; for(int j=0;j<n;j++){ if(lowcost[j]!=-1&&lowcost[j]<minn){ k=j;minn=lowcost[j]; } } sum+=minn; lowcost[k]=-1; for(int j=0;j<n;j++){ lowcost[j]=min(lowcost[j],edg[k][j]); } } printf("The highest possible quality is 1/%d.\n",sum); } int main() { while(~scanf("%d",&n)&&n) { memset(edg,0,sizeof(edg)); memset(lowcost,0,sizeof(lowcost)); for(int i=0;i<n;i++){ scanf("%s",w[i]); } Build(); prim(); } return 0; }
标签:
原文地址:http://www.cnblogs.com/jianrenfang/p/5729997.html