求助,只wa了第五个点
  • 板块P1433 吃奶酪
  • 楼主malthel
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/11/24 22:24
  • 上次更新2023/11/5 07:23:34
查看原帖
求助,只wa了第五个点
265716
malthel楼主2020/11/24 22:24
#include<bits/stdc++.h>
using namespace std;
double x[16],y[16];
double dp[16][33000];
double d[16][16];
double dis(int u,int v)
{
	return sqrt((x[u]-x[v])*(x[u]-x[v])+(y[u]-y[v])*(y[u]-y[v]));
}
int main()
{
	memset(dp,127,sizeof(dp));
	int n;
	cin>>n;
	x[0]=0;
	y[0]=0;
	for(int i=1;i<=n;i++)
	{
		cin>>x[i]>>y[i];
	}
	for(int i=0;i<=n;i++)
	{
		for(int j=i+1;j<=n;j++)
		{
			d[i][j]=dis(i,j);
			d[j][i]=dis(j,i); 
		}
	}
	for(int i=1;i<=n;i++)
	{
		dp[i][1<<(i-1)]=d[0][i];
	}
	for(int k=1;k<(1<<n);k++)
	{
		for(int i=1;i<=n;i++)
		{
			if(k&(1<<(i-1))==0) continue;
			for(int j=1;j<=n;j++)
			{
				if(i==j) continue;
				if(k&(1<<(j-1))==0) continue;
				dp[i][k]=min(dp[i][k],dp[j][k-(1<<(i-1))]+d[i][j]); 
			}
		}
	}
	double ans=dp[0][0];
	for(int i=1;i<=n;i++)
	{
		ans=min(ans,dp[i][(1<<n)-1]);
	}
	printf("%.2lf",ans);
	return 0;
}

第五个点得数据: 11 -1 -1 100 100 -1 0 1 1 -1 1 2 2 0 -1 3 3 0 1 1 -1 1 0

2020/11/24 22:24
加载中...