这道题目一定要理解题意,题目大意是:历史上,曾用7个小写字母来表示每种truck的型号,每两种型号之间的差距为字母串中不同字母的个数
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int maxn=2005;
const int inf=0x3f3f3f3f;
int map[maxn][maxn];
int dist[maxn];
bool p[maxn];
string s[maxn];
int n;
int k2;
void init()
{
int i,j;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
map[i][j]=inf;
}
}
}
void prime()
{
k2=0;
int i,j,pos;
for(i=0; i<n; i++)
{
p[i]=false;
dist[i]=map[0][i];
}
p[0]=true;
dist[0]=0;
for(i=1; i<n; i++)
{
int min=inf;
for(j=0; j<n; j++)
{
if(!p[j]&&dist[j]<min)
{
min=dist[j];
pos=j;
}
}
p[pos]=true;
k2+=min;
for(j=0; j<n; j++)
{
if(!p[j]&&dist[j]>map[pos][j])
{
dist[j]=map[pos][j];
}
}
}
}
int main()
{
int i,j,k;
while(scanf("%d",&n),n)
{
for(i=0; i<n; i++)
cin>>s[i];
for(i=0; i<n; i++)
{
for(j=i+1; j<n; j++)
{
int sum=0;
for(k=0; k<7; k++)
{
if(s[i][k]!=s[j][k])
{
sum++;
}
}
map[i][j]=map[j][i]=sum;
}
}
prime();
cout<<"The highest possible quality is 1/"<<k2<<"."<<endl;
}
return 0;
}
poj 1789
最新推荐文章于 2023-02-20 09:09:49 发布