您的位置:首页 > 其它

poj 2137 Cowties

2016-07-18 21:12 316 查看
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#include<cmath>
using namespace std;
typedef long long ll;
const int maxn=100100;
const double INF=100000000;
double  dp[110][50];

double dist(double x1,double y1,double x2,double y2){
return sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
}
struct sp{
int num;
double x[50],y[50];
}p[110];
int main(){
//  freopen("F:\\123.txt","r",stdin);

int n,m,uu,vv;
while(scanf("%d",&n)!=EOF){

for(int i=1;i<=n;i++){
scanf("%d",&p[i].num );
for(int j=0;j<p[i].num ;j++){
scanf("%lf%lf",&p[i].x[j],&p[i].y[j] );
}
}
p[n+1].num=p[1].num ;
for(int j=0;j<p[1].num;j++){
p[n+1].x[j]=p[1].x[j] ;
p[n+1].y[j]=p[1].y[j] ;
}

double res=INF;

for(int u=0;u<p[1].num;u++){  //枚举起点

for(int i=1;i<=n;i++){     //初始化INF
for(int j=0;j<=50;j++){
dp[i][j]=INF;
}
}
dp[1][u]=0;   //起点 绳长为 zero;
for(int i=2;i<=n;i++){
for(int j=0;j<p[i].num;j++){
for(int k=0;k<p[i-1].num;k++){
dp[i][j]= min(dp[i][j],dp[i-1][k]+dist(p[i-1].x[k],p[i-1].y[k],p[i].x[j],p[i].y[j]));
}
}
}
// 首尾要相连

for(int j=0;j<p
.num;j++){
res=min(res,dp
[j]+dist(p
.x[j],p
.y[j],p[1].x[u],p[1].y[u]));

}
}

printf("%d\n",(int)(res*100));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: