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; }
相关文章推荐
- SQL Developer工具如何转译&(input parameter)符号
- 任务调度的合理性
- JSON 入门 之 JSON与XML 的比较(一)
- 余额重估(Revaluation Balances)相关设置和操作
- 训练之搜索吃豆人
- 初学OpenGL
- C++ 提高3 STL基本概念 string 迭代器 容器
- java8增强的工具类 :Arrays
- Poj2186 Popular Cows
- 线程池
- WMS图例展示
- WMS图例展示
- Open judge C16H:Magical Balls 快速幂+逆元
- 如何用卷积神经网络CNN识别手写数字集?
- 不同类型数据间的转换
- pullToRefresh的使用(1) ListView的上拉加载
- unity3d培训_005
- HDU1551
- NOIP 2013 提高组&&队内赛部分题解
- 1113 Wall