1 条题解

  • 1
    @ 2020-08-30 15:25:02

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;

    const double INF=1e30;
    const int MAXN=1003;
    struct node
    {
    double x,y;
    bool operator<(const node&b)const
    {
    return x<b.x;
    }
    }a[MAXN];
    int n;
    double ans=INF;
    double f[MAXN][MAXN];
    double d[MAXN][MAXN];

    double getd(int i,int j)
    {
    double x=fabs(a[i].x-a[j].x);
    double y=fabs(a[i].y-a[j].y);
    return sqrt(x*x+y*y);
    }

    void init()
    {
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i].x>>a[i].y;
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++)
    for(int j=i+1;j<=n;j++)
    d[i][j]=getd(i,j),f[i][j]=INF;
    }

    void DP()
    {
    f[1][2]=d[1][2];
    for(int i=1;i<=n;i++)
    for(int j=i+1;j<=n;j++)
    {
    f[i][j+1]=min(f[i][j+1],f[i][j]+d[j][j+1]);
    f[j][j+1]=min(f[j][j+1],f[i][j]+d[i][j+1]);
    }
    for(int i=1;i<=n-1;i++)

    ans=min(ans,f[i][n]+d[i][n]);

    printf("%.2lf\n",ans);
    }

    int main()
    {
    init();
    DP();
    }

  • 1

信息

ID
1027
难度
9
分类
动态规划 点击显示
标签
(无)
递交数
1
已通过
1
通过率
100%
上传者