1 solutions
-
0
C++ :
#include<iostream> #include<math.h> #include<stdio.h> //#include<fstream> using namespace std; //ifstream fin("cin.in"); int n; double f[1001][1001]; double d[1001][1001]; double x[1001],y[1001]; void Qsort(int left,int right){ if(left>=right) return ; int i=left,j=right;double mid=x[(left+right)>>1]; while(i<=j) { while(x[i]<mid) i++; while(x[j]>mid) j--; if(i<=j) { swap(x[i],x[j]); swap(y[i],y[j]); i++;j--; } } Qsort(left,j); Qsort(i,right); } int main() { cin>>n; for(int i=1;i<=n;++i) cin>>x[i]>>y[i]; Qsort(1,n); for(int i=1;i<=n;++i) for(int j=i+1;j<=n;++j) d[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) f[i][j]=1e24; f[2][1]=d[1][2]; for(int i=3;i<=n;++i) for(int j=1;j<i;++j) if(j+1<i) f[i][j]=f[i-1][j]+d[i-1][i]; else { for(int k=1;k<j;++k) f[i][j]=min(f[i][j],f[j][k]+d[k][i]); } printf("%.2lf\n",f[n][n-1]+d[n-1][n]); return 0; }
- 1
Information
- ID
- 18431
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By