平面最远哈密顿距离
題目: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; }
?
總結
- 上一篇: 整数域上的多项式辗转相除
- 下一篇: POJ3197(连分数表示)