很是感伤,前两天做的题都没做出来。。。好久没有AC的感觉了,昨晚终于AC一个题了!⊙﹏⊙b汗!
这题就是一个比较裸的最小生成树,考虑的边比较多,所以用了Prim算法。。。
View Code
#include <stdio.h>
#include <memory.h>
#define N 2002
int map[N][N];
char s[N][8];
int lowcost[N];
int distance(int x,int y)
{
int i=0,ans=0;
while(s[x][i])
{
if(s[x][i]!=s[y][i]) ++ans;
++i;
}
return ans;
}
int Prime(int n)
{
int i,j,v=1,u,ans=0;
memset(lowcost,111,sizeof(lowcost));
for(i=1;i<n;i++)
{
lowcost[v]=-1; u=0;
for(j=1;j<=n;j++)
{
if(lowcost[j]!=-1)
{
if(map[v][j]<lowcost[j])
lowcost[j]=map[v][j];
if(lowcost[u]>lowcost[j])
u=j;
}
}
v=u; ans+=lowcost[v];
}
return ans;
}
int main()
{
int i,j,n;
freopen("input.txt","r",stdin);
while(scanf("%d",&n),n)
{
for(i=1;i<=n;i++)
{
scanf("%s",s[i]);
for(j=1;j<i;j++)
{
map[i][j]=map[j][i]=distance(i,j);
}
}
printf("The highest possible quality is 1/%d.\n",Prime(n));
}
return 0;
}
空间15000KB 时间390MS 长度800B
顺便看了看此题排行第一名checkoj 188KB 125MS 450B我震惊了!!!这……坑爹!
想不明白他是怎么搞的!!这……太牛B了!!暂时也没找到之类的源码……ORZ