标签:cts star out win money term while scan connect
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 4556 | Accepted: 1993 |
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
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int n; double dis[550][550],f[550][550]; struct nond{ int x,y; }v[550]; int cmp(nond a,nond b){ if(a.x==b.x) return a.y<b.y; return a.x<b.x; } void pre(){ for(int i=1;i<=n;i++) for(int j=i;j<=n;j++) dis[i][j]=dis[j][i]=sqrt((double)(v[i].x-v[j].x)*(v[i].x-v[j].x)+(v[i].y-v[j].y)*(v[i].y-v[j].y)); } int main(){ while(scanf("%d",&n)!=EOF){ memset(dis,0,sizeof(dis)); for(int i=1;i<=n;i++) scanf("%d%d",&v[i].x,&v[i].y); sort(v+1,v+1+n,cmp); pre(); f[1][2]=f[2][1]=dis[1][2]; f[2][2]=2*dis[1][2]; for(int i=3;i<=n;i++){ for(int j=1;j<i-1;j++) f[i][j]=f[j][i]=f[i-1][j]+dis[i][i-1]; f[i][i-1]=f[i-1][i]=f[i][i]=0x7f7f7f7f; for(int j=1;j<=i-1;j++) f[i-1][i]=f[i][i-1]=min(f[i][i-1],f[j][i-1]+dis[j][i]); for(int j=1;j<=i;j++) f[i][i]=min(f[i][i],f[j][i]+dis[j][i]); } printf("%.2lf\n",f[n][n]); } }
标签:cts star out win money term while scan connect
原文地址:http://www.cnblogs.com/cangT-Tlan/p/7429766.html