全wa求助
查看原帖
全wa求助
984679
illidan_楼主2023/8/24 21:11
#include <bits/stdc++.h>

using namespace std;

double p[1<<20][22],dist[22][22];
int x[22],y[22];
double ans=1e9;

int main()
{
    int n,d;
    cin>>n>>d;
    for(int i=0;i<n;i++) cin>>x[i]>>y[i];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
                double d_th=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
                if(d_th<=d)
                {
                    dist[i][j]=d_th;
                    //dist[j][i]=dist[i][j];
                }
                else
                {
                    dist[i][j]=1e9;
                    //dist[j][i]=dist[i][j];
                }
        }
    }
    for (int k = 0; k < n; ++k)
		for (int i = 0; i < n; ++i)
			for (int j = 0; j < n; ++j)
				dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]);
    memset(p,0x7f,sizeof(p));
    p[1][0]=0;
    for(int i=1;i<(1<<n);i++)
    {
        for(int j=0;j<n;j++)
        {
            if((i>>j)&1)
            {
                for(int k=0;k<n;k++)
                {
                    if ((i^1<<j)>>k&1)
                    {
                        p[i][j]=min(p[i][k],p[i^1<<j][k]+dist[j][k]);
                        //p[i|(1<<k)][k]=min(p[i|(1<<k)][k],p[i][j]+dist[j][k]);
                    }
                }
            }
        }
    }

    for(int i=1;i<n;i++)
    {
        ans=min(ans,p[(1<<n)-1][i]+dist[0][i]);
    }
    printf("%.2lf",ans);
    return 0;
}

和答案差不多,看半天了全wa了,样例过了

2023/8/24 21:11
加载中...