1 solutions

  • 0
    @ 2025-11-5 17:26:15

    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