标签:
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4307 | Accepted: 1894 |
Description
Input
Output
Sample Input
3 1 1 2 3 3 1 4 1 1 2 3 3 1 4 2
Sample Output
6.47 7.89
Source
// // main.cpp // poj2677 // // Created by Candy on 10/18/16. // Copyright © 2016 Candy. All rights reserved. // #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> using namespace std; typedef long long ll; const int N=1005,INF=1e9; inline int read(){ char c=getchar();int x=0,f=1; while(c<‘0‘||c>‘9‘){if(c==‘-‘)f=-1;c=getchar();} while(c>=‘0‘&&c<=‘9‘){x=x*10+c-‘0‘;c=getchar();} return x*f; } int n,x[N],y[N]; double d[N][N]; inline double dis(int i,int j){ return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } void dp(){ d[n][n-1]=dis(n,n-1); for(int i=n;i>=1;i--) for(int j=i-1;j>=1;j--){ if(i+1<=n)d[i][j]=min(d[i+1][j]+dis(i,i+1),d[i+1][i]+dis(j,i+1)); else if(i!=n||j!=n-1) d[i][j]=INF; //printf("d %d %d %f\n",i,j,d[i][j]); } } int main(int argc, const char * argv[]) { while(scanf("%d",&n)!=EOF){ for(int i=1;i<=n;i++) x[i]=read(),y[i]=read(); dp(); printf("%.2f\n",d[2][1]+dis(1,2)); } return 0; }
标签:
原文地址:http://www.cnblogs.com/candy99/p/5975607.html