洛谷P1433 吃奶酪

题目链接:https://www.luogu.org/problem/P1433

参考代码:

#include<bits/stdc++.h>
using namespace std;
int n;
double dis[16][16],ans=100000,now,x[16],y[16];//两点距离(预处理),最后的结果,现在的距离,每个点的坐标
bool vis[16];//奶酪是否被吃
void dfs(int pos,int num)//pos第几块奶酪 num吃的第几块 
{
	if(now>ans)//如果现在的距离比原来的结果大就返回
		return;
	if(num==n)//吃完了
	{
		if(ans>now)//更新答案,将小的答案保存
			ans=now;
		return;
	}
	vis[pos]=true;//标记
	for(int i=1;i<=n;i++)
	{
		if(vis[i]==false)//没被吃
		{
			now+=dis[pos][i];//现在的距离 
			dfs(i,num+1);
			now-=dis[pos][i];//回溯
		}
	}
	vis[pos]=false;//回溯
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>x[i]>>y[i];
	x[0]=0;y[0]=0; 
	for(int i=0;i<=n;i++)//预处理两点距离
		for(int j=0;j<=n;j++)
			dis[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
	dfs(0,0);
	cout<<setiosflags(ios::fixed)<<setprecision(2)<<ans<<endl;
}
posted @ 2019-08-22 14:34  如梦山河乀  阅读(125)  评论(0编辑  收藏  举报