【题意】点击打开链接
【解题方法】哈密顿距离定义是:对于二维平面上的两点A,B,其坐标分别为:,,那么它们的哈密顿距离D表示为:
,去掉绝对值符号,有以下四种情况:
然后进一步转化:
然后,用二进制枚举。 D = max{每种情况的最大值}
【AC 代码】#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn=100005;
const double inf=1e10;
double a[maxn][5];
int n;
int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0; i<n; i++)
for(int j=0; j<5; j++) scanf("%lf",&a[i][j]);
double ans=0.0;
double maxx,minn;
for(int s=0;s<(1<<5); s++){
minn=inf;
maxx=-inf;
for(int i=0; i<n; i++){
double t=0;
for(int j=0; j<5; j++){
if(s&(1<<j)) t+=a[i][j];
else t-=a[i][j];
}
minn=min(minn,t);
maxx=max(maxx,t);
}
ans=max(ans,maxx-minn);
}
printf("%.2f\n",ans);
}
}