poj1789 - Truck History
2012-09-14 19:38
309 查看
想看更多的解题报告: http://blog.csdn.net/wangjian8006/article/details/7870410
转载请注明出处:http://blog.csdn.net/wangjian8006
题目大意:有n个型号,每个型号有7个字母代表其型号,每个型号之间的差异是他们字符串中对应字母不同的个数d[ta,tb]代表a,b之间的差异数
问1/Σ(to,td)d(to,td)最大值
解题思路:根据题意,即分母最小,这样就转换为一个典型的求最小生成树
/* prim Memory 15584K Time 360MS */ #include <iostream> using namespace std; #define MAXV 2001 #define INF INT_MAX int n; char s[MAXV][8]; int map[MAXV][MAXV]; int d[MAXV]; bool vis[MAXV]; void prim(){ int i,j,v,tmp; for(i=0;i<n;i++){ vis[i]=0; d[i]=map[0][i]; } for(i=1;i<=n;i++){ tmp=INF; for(j=0;j<n;j++){ if(!vis[j] && tmp>d[j]){ tmp=d[j]; v=j; } } vis[v]=1; for(j=0;j<n;j++){ if(!vis[j] && d[j]>map[v][j]){ d[j]=map[v][j]; } } } for(d[0]=0,i=1;i<n;i++) d[0]+=d[i]; printf("The highest possible quality is 1/%d.\n",d[0]); } int main(){ int i,j,k,num; while(scanf("%d",&n) && n){ for(i=0;i<n;i++){ //这里map可以不用初始化,因为每个两个点都有值 scanf("%s",s[i]); for(j=0;j<i;j++){ num=0; for(k=0;k<7;k++) if(s[i][k]!=s[j][k]) num++; map[i][j]=map[j][i]=num; } } prim(); } return 0; }
相关文章推荐
- poj_1789 Truck History
- POJ 1789:Truck History(prim&&最小生成树)
- POJ 1789 Truck History 最小生成树
- POJ 1789 Truck History(最小生成树--prime)
- poj 1789 Truck History
- Truck History(poj 1789)
- Truck History - poj 1789 (Prim 算法)
- POJ 1789 Truck History
- Truck History--POJ 1789
- POJ-1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History(最小生成树)
- POJ 1789 Truck History
- POJ 1789 Truck History(构造最小生成树)
- poj 1789 Truck History
- POJ 1789 Truck History 最小生成树
- kuangbin专题六 POJ1789 Truck History
- poj 1789 Truck History
- POJ 1789:Truck History
- poj 1789 Truck History