POJ 1789
2016-03-17 16:59
204 查看
题目我咋一看, 觉得有点新颖,后来 读题之后 发现又是 最小生成树的 例子。
题目大意:每条字符串 都可以 由其他的字符串 演化出来。定义两个字符串之间的距离,就是它们之间不同的字符的个数。 要求的是, 如何演化,对应的距离之和 最短,相应的 倒数也就是 最大的。我们知道,最小生成树的权值之和是最短的。
因为这道题,点的范围是 2~2000,并且构成的图 应该是 密集型的,每两个点之间 都会有 边相连,所以我选择 Prim算法
#include <iostream>
using namespace std;
#define MAX 2010
int n;
int map[MAX][MAX];
int vis[MAX];
void Prim(){
int i,j,k,dis[MAX];
k = 0;
for(i=0;i<n;i++){
dis[i] = map[0][i];
vis[i] = 0;
}
for(i=1;i<=n;i++){
int temp = 10;
for(j=0;j<n;j++){
if(!vis[j]&&dis[j]<temp){
temp = dis[j];
k = j;
}
}
vis[k] = 1;
for(j=0;j<n;j++){
if(!vis[j]&&dis[j]>map[k][j])
dis[j] = map[k][j];
}
}
for(i=0;i<n;i++)
dis[0] += dis[i];
cout<<"The highest possible quality is 1/"<<dis[0]<<"."<<endl;
}
int main(){
int i,j,k;
char str[MAX][7];
while(cin>>n,n){
for(i=0;i<n;i++){
cin>>str[i];
}
for(i=0;i<n;i++){
for(j=i;j<n;j++){
int count = 0;
for(k=0;k<7;k++){
if(str[i][k]!=str[j][k])
count++;
}
map[i][j] = map[j][i] = count;
}
}
Prim();
}
return 0;
}
题目大意:每条字符串 都可以 由其他的字符串 演化出来。定义两个字符串之间的距离,就是它们之间不同的字符的个数。 要求的是, 如何演化,对应的距离之和 最短,相应的 倒数也就是 最大的。我们知道,最小生成树的权值之和是最短的。
因为这道题,点的范围是 2~2000,并且构成的图 应该是 密集型的,每两个点之间 都会有 边相连,所以我选择 Prim算法
#include <iostream>
using namespace std;
#define MAX 2010
int n;
int map[MAX][MAX];
int vis[MAX];
void Prim(){
int i,j,k,dis[MAX];
k = 0;
for(i=0;i<n;i++){
dis[i] = map[0][i];
vis[i] = 0;
}
for(i=1;i<=n;i++){
int temp = 10;
for(j=0;j<n;j++){
if(!vis[j]&&dis[j]<temp){
temp = dis[j];
k = j;
}
}
vis[k] = 1;
for(j=0;j<n;j++){
if(!vis[j]&&dis[j]>map[k][j])
dis[j] = map[k][j];
}
}
for(i=0;i<n;i++)
dis[0] += dis[i];
cout<<"The highest possible quality is 1/"<<dis[0]<<"."<<endl;
}
int main(){
int i,j,k;
char str[MAX][7];
while(cin>>n,n){
for(i=0;i<n;i++){
cin>>str[i];
}
for(i=0;i<n;i++){
for(j=i;j<n;j++){
int count = 0;
for(k=0;k<7;k++){
if(str[i][k]!=str[j][k])
count++;
}
map[i][j] = map[j][i] = count;
}
}
Prim();
}
return 0;
}
相关文章推荐
- 【bzoj1670】[Usaco2006 Oct]Building the Moat护城河的挖掘 求凸包
- python多线程简单同步问题
- ppt背景
- Python安装、集成Eclipse及HelloWorld
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
- QtQuick获取屏幕信息
- 开发优化--老板优化
- java类的动态加载
- iOS分享【OC】—— 浅谈 GCD
- redis简单总结
- Java知识五--注解浅析
- 各种排序算法的性能
- iOS接入微信支付
- PHP/Java Bridge 构造方法传参
- 解决CefSharp的CefReturnValue问题
- hdoj 1877 又一版 A+B 【进制转换】
- log日志级别说明
- CentOS下找不到eth0设备的解决方法
- 迭代画树
- 2.1 -1.0 Xcode(发布时间、使用、快捷键、插件相关)