POJ 1789 Truck History
2015-08-29 09:03
267 查看
//题意:历史上,曾用7个小写字母来表示每种truck的型号,每两种型号之间的差距为字母串中不同字母的个数。现在给出n种不同型号的truck,问怎样使
1/Σ(to,td)d(to,td)的值最小。//
AC代码:
1/Σ(to,td)d(to,td)的值最小。//
AC代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; #define N 2005 int p[N]; char s[N][8]; int n; int L; struct node { int w,v,c; }t[N*N]; int cmp(node p,node q) { return p.c<q.c; } int find(int k) { if(p[k]==k) { return p[k]; } else { return find(p[k]); } } int cl() { int sum=0,cnt=0; int i; for(i=0;i<L;i++) { int x=find(t[i].w); int y=find(t[i].v); if(x!=y) { p[y]=x; cnt++; sum+=t[i].c; } if(cnt==n-1) return sum; } return sum; } int B(char *s1,char *s2) { int S=0; for(int i=0;i<7;i++) { if(s1[i]!=s2[i]) { S++; } } return S; } int main() { while(scanf("%d",&n)!=EOF&&n) { int i,j; L=0; for(i=0;i<n;i++) { scanf("%s",s[i]); p[i]=i; } p[n]=n; for(i=0;i<n;i++) { for(j=i+1;j<n;j++) { t[L].w=i+1; t[L].v=j+1; t[L].c=B(s[i],s[j]); L++; } } sort(t,t+L,cmp); printf("The highest possible quality is 1/%d.\n",cl()); } return 0; }
相关文章推荐
- 人需要留出一部分时间想想自己在做什么
- 嵌入式系统设计中常用总线和接口
- Android 操作SQLite基本用法
- C#基础----string和stringBuilder
- 读书 专业 效率 目标
- 黑马程序员——Java基础之IO流
- 来惠普10天小总结。
- Scala中Context Bounds代码实战及其在Spark中的应用源码解析之Scala学习笔记-36
- 线程的停止
- The Java EE 6 Tutorial Sharing Information
- java静态块,非静态块,构造函数
- Win10 10525升级Win10 Build 10532失败回滚怎么办?
- Android ImageView设置长度高度为wrap_content时高度根据图片比例自适应
- 《IOS_C语言》一维数组、数组排序、字符数组
- 重写关键字override与new
- php小经验:解析preg_match与preg_match_all 函数
- 【bzoj1009】【HNOI2008】【GT考试】
- Android 设置EditText光标Curso颜色及粗细
- 序列化和反序列化
- 深搜简单题