BFS+状压,40求助
  • 板块P1433 吃奶酪
  • 楼主Kastic_pd
  • 当前回复3
  • 已保存回复3
  • 发布时间2021/5/9 15:47
  • 上次更新2023/11/4 23:29:09
查看原帖
BFS+状压,40求助
307815
Kastic_pd楼主2021/5/9 15:47

我写的BFS感觉比较玄学......

6个点WA,求调:

#include<bits/stdc++.h>
using namespace std;
#define RI register int
#define ll long long
#define MAXN 17
#define LN 1<<MAXN
int n;
struct node{
	int op;
	int c;
};
queue <node> que;
double f[MAXN][MAXN];
int p[MAXN][2];
double dp[LN];
node w;
int main(){
	scanf("%d",&n);
	for(RI i=1;i<=n;i++)
		scanf("%d%d",&p[i][0],&p[i][1]);
	p[0][0]=0,p[0][1]=0;
	for(RI i=0;i<=n;i++)
		for(RI j=0;j<=n;j++)
			if(f[i][j]==0&&i!=j){
				f[i][j]=sqrt((p[i][0]-p[j][0])*(p[i][0]-p[j][0])+(p[i][1]-p[j][1])*(p[i][1]-p[j][1]));
				f[j][i]=f[i][j];
			}
	que.push((node){0,1});
	n++;
	for(RI i=0;i<=LN;i++)
		dp[i]=1e10;
	dp[1]=0.000000;
	while(!que.empty()){
		w=que.front();
		que.pop();
		for(RI i=1;i<=n;i++)
			if(!(w.c&(1<<i)))
				if(dp[w.c]+f[w.op][i]<dp[w.c|(1<<i)]){
					dp[w.c|(1<<i)]=dp[w.c]+f[w.op][i];
					que.push((node){i,w.c|(1<<i)});
				}
	}
	printf("%0.2lf",dp[(1<<n)-1]);
	return 0;
}

#1 测试点

答案:17.15

我的输出:16.74

码风偏丑,见谅QwQ

2021/5/9 15:47
加载中...