题目:http://poj.org/problem?id=2926
分析:哈密顿距离定义是:对于二维平面上的两点A,B,其坐标分别为:,,那么它们的哈密顿距离D表示为:
,去掉绝对值符号,有以下四种情况:
然后进一步转化:
然后,用二进制枚举。 D = max{每种情况的最大值}
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
const int N = 100005;
const double INF = 1e100;
double a[N][5];
int n;
int main()
{
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
for(int j=0;j<5;j++)
scanf("%lf",&a[i][j]);
double ans = 0,mi,mx,t;
for(int s=1;s<(1<<5);s++)
{
mi = INF;
mx = -INF;
for(int i=0;i<n;i++)
{
t = 0;
for(int j=0;j<5;j++)
{
if((1<<j) & s) t += a[i][j];
else t -= a[i][j];
}
mi = min(mi,t);
mx = max(mx,t);
}
ans = max(ans,mx-mi);
}
printf("%.2lf\n",ans);
}
return 0;
}