Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 19772 | Accepted: 7633 |
Description
Input
Output
Sample Input
4 aaaaaaa baaaaaa abaaaaa aabaaaa 0
Sample Output
The highest possible quality is 1/3.
Source
1 #include<stdio.h> 2 #include<string.h> 3 const int inf = 0x3f3f3f3f ; 4 int a[2050][2050] ; 5 char st[2050][10] ; 6 int d[2050] ; 7 bool p[2050] ; 8 int n ; 9 10 void prim () 11 { 12 for (int i = 1 ; i <= n ; i++) { 13 d[i] = a[1][i] ; 14 p[i] = 1 ; 15 } 16 d[1] = 0 ; 17 int ans = 0 ; 18 for (int i = 1 ; i < n ; i++) { 19 int minc = inf , k ; 20 for (int j = 1 ; j <= n ; j++) { 21 if (d[j] && d[j] < minc) { 22 minc = d[j] ; 23 k = j ; 24 // printf ("d[%d]= %d\n" , j , d[j]) ; 25 } 26 } 27 d[k] = 0 ; 28 for (int j = 1 ; j <= n ; j++) { 29 if (d[j] && d[j] > a[k][j]) { 30 d[j] = a[k][j] ; 31 p[j] = k ; 32 } 33 } 34 ans += minc ; 35 } 36 printf ("The highest possible quality is 1/%d.\n" , ans) ; 37 } 38 39 int main () 40 { 41 // freopen ("a.txt" , "r" , stdin) ; 42 while (~ scanf ("%d" , &n)) { 43 if (n == 0) 44 break ; 45 getchar () ; 46 for (int i = 1 ; i <= n ; i++) 47 for (int j = 1 ; j <= n ;j++) 48 a[i][j] = inf ; 49 for (int i = 1 ; i <= n ; i++) 50 gets (st[i]) ; 51 for (int i = 1 ; i <= n ; i++) { 52 int cnt = 0 ; 53 for (int j = i + 1 ; j <= n ; j++) { 54 for (int k = 0 ; k < 7 ; k++) { 55 if (st[i][k] != st[j][k]) { 56 cnt ++ ; 57 } 58 } 59 a[i][j] = a[j][i] = cnt ; 60 cnt = 0 ; 61 } 62 } 63 prim () ; 64 } 65 return 0 ; 66 }
原文:http://www.cnblogs.com/get-an-AC-everyday/p/4311961.html