poj 1789 Truck History
来源:互联网 发布:icmp 用的端口 编辑:程序博客网 时间:2024/05/19 02:00
链接:点击打开链接
用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数。一个编号只能由另一个编号“衍生”出来,代价是这两个编号之间相应的distance,现在要找出一个“衍生”方案,使得总代价最小,也就是distance之和最小。
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>using namespace std;#define INF 0x7f7f7f7fint cmp(char *str1,char *str2){ int sum=0; for(int i=0;i<7;i++) if(str1[i]!=str2[i]) sum++; return sum;}int edge[2010][2010];int nn,vis[2010];void prime(int x){ int i,j,k; int sum_i,mark[2010],mi_n; for(i=1;i<=nn;i++){ mark[i]=edge[x][i]; vis[i]=0; }vis[x]=1; sum_i=0; for(i=1;i<=nn;i++){ mi_n=INF; for(j=1;j<=nn;j++){ if(!vis[j]&&mark[j]<mi_n){ mi_n=mark[j]; k=j; } } vis[k]=1; if(mi_n!=INF) sum_i+=mi_n; for(j=1;j<=nn;j++){ if(!vis[j]&&edge[k][j]<mark[j]) mark[j]=edge[k][j]; } } printf("The highest possible quality is 1/%d.\n",sum_i);}int main(){ int i,j; char str[2010][10]; while(~scanf("%d",&nn)&&nn){ for(i=1;i<=nn;i++) for(j=1;j<=nn;j++) edge[i][j]=INF; for(i=1;i<=nn;i++) scanf("%s",str[i]); for(i=1;i<=nn;i++) for(j=i+1;j<=nn;j++) edge[i][j]=edge[j][i]=cmp(str[i],str[j]); prime(1); } return 0;}
- 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
- 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
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- POJ 1789 Truck History
- Android电话系统之概述篇
- 【转】SQL Server并行度问题
- poj 1659 Frogs' Neighborhood (贪心 + 判断度数序列是否可图)
- (Domino)Unable to gain exclusive access to mail drop的报错
- oracle 列转行 LISTAGG和WM_CONCAT .
- poj 1789 Truck History
- Android电话系统之-rild
- WPF——图片的预览,以流的方式将图片保存在数据库中,再以流的方式从数据库中读取显示图片
- Windows server2003下搭建openmeetings2
- 新的移动服务示例
- oracle中左关联,右关联区别
- HTTP请求返回状态码
- Xcode调试技巧
- Android RIL-Java