Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
151845 吴宗桦 巡逻线路 C++ 通过 100 0 MS 616 KB 1020 2024-06-19 13:31:21

Tests(5/5):


#include <cstdio> #include <iostream> #include <cmath> #include <cstring> using namespace std; double f[1011][1011],x[1011],y[1011],dis[1011][1011]; int n,b1,b2,k; int main() { cin>>n>>b1>>b2; for (int i=1;i<=n;i++) { cin>>x[i]>>y[i]; for (int j=1;j<i;j++) dis[i][j]=dis[j][i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } for (int i=0;i<=n;i++) for (int j=0;j<=n;j++) f[i][j]=10000000; f[1][1]=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { if (i==j&&i>1) continue; k=max(i,j)+1; if (k>n) { if(i<n) f[n][n]=min(f[n][n],f[i][j]+dis[i][n]); if(j<n) f[n][n]=min(f[n][n],f[i][j]+dis[j][n]); } else { if(k!=b2+1) f[k][j]=min(f[k][j],f[i][j]+dis[i][k]); if(k!=b1+1) f[i][k]=min(f[i][k],f[i][j]+dis[j][k]); } } printf("%0.2lf\n",f[n][n]); return 0; }


测评信息: