poj 1789

来源:互联网 发布:淘宝和微商的区别 编辑:程序博客网 时间:2024/05/12 20:13

prim就行

不同字母为距离

注意几个地方

第一

能不用string就不用string,就因为他超时了;

第二

cost[i][j]

最好是i i+1

不要是1 1这样for循环

前者跑了438

后者跑了579ms

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>using namespace std;const int INF=1e9+7;const int maxn=2005;int cost[maxn][maxn];bool visit[maxn];int mincost[maxn];int n;char p[maxn][8];int diff(char a[],char b[]){int sum=0;for(int i=0;i<7;i++)if(a[i]!=b[i]) sum++;return sum;}int prim(){for(int i=1;i<=n;i++)mincost[i]=INF;memset(visit,false,sizeof(visit));mincost[1]=0;int res=0;for(int i=1;i<=n;i++){int v=-1;for(int u=1;u<=n;u++)if(!visit[u]&&(v==-1||mincost[u]<mincost[v])) v=u;if(v==-1) break;visit[v]=true;res+=mincost[v];for(int u=1;u<=n;u++){mincost[u]=min(mincost[u],cost[v][u]);}}return res;}int main(){while(~scanf("%d",&n)&&n){for(int i=1;i<=n;i++){scanf("%s",p[i]);} for(int i=1;i<=n;i++)for(int j=i+1;j<=n;j++)cost[i][j]=cost[j][i]=diff(p[i],p[j]);printf("The highest possible quality is 1/%d.\n",prim()); } } 



原创粉丝点击