求助
  • 板块P1433 吃奶酪
  • 楼主BugGod
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/7/14 15:44
  • 上次更新2023/11/3 09:53:36
查看原帖
求助
541254
BugGod楼主2023/7/14 15:44
#include<bits/stdc++.h>
using namespace std;
int n;
double dp[15][1<<15],x[15],y[15],dist[15][15];
double di(int x1,int x2,int y1,int y2)
{
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main()
{
	cin>>n;
	memset(dp,127,sizeof(dp));
	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++)
		{
			dist[i][j]=di(x[i],x[j],y[i],y[j]);
		}
	}
	for(int s=0;s<(1<<n);s++)
	{
		for(int i=0;i<n;i++)
		{
			if(s&(1<<i))
			{
				for(int j=0;j<n;j++)
				{
					if((s&(1<<j))==0)
					{
						dp[s|(1<<j)][j]=min(dp[s|(1<<j)][j],dp[s][i]+dist[i][j]);
					}
				}
			}
		}
	}
	double ans=1e18;
	for(int i=0;i<n;i++)
	{
		ans=min(ans,dp[(1<<n)-1][i]);
		//cout<<dp[(1<<n)-1][i]<<" ";
	}
	printf("%.2lf",ans);
	return 0;
}

20pts,记录,样例输出-1.00。

2023/7/14 15:44
加载中...