WA on #5
查看原帖
WA on #5
556362
Unnamed114514楼主2022/9/19 23:22
#include<bits/stdc++.h>
using namespace std;
int n,x[25],y[25];
map<int,int> dp[25],nxt[25];
inline int f(int x){
	return x*x;
}
int dfs(int lst,int s){
	if(s==(1<<n)-1)
		return f(x[lst]-x[0])+f(y[lst]-y[0]);
	if(dp[lst].count(s))
		return dp[lst][s];
	dp[lst][s]=1e9+7;
	for(int i=1;i<=n;++i)
		if(!(s&(1<<i-1))){
			int w=dfs(i,s|(1<<i-1))+min(f(x[lst]-x[i])+f(y[lst]-y[i]),f(x[lst]-y[0])+f(y[lst]-y[0])+f(x[i]-x[0])+f(y[i]-y[0]));
			if(w<dp[lst][s]){
				dp[lst][s]=w;
				nxt[lst][s]=i;
			}
		}
	return dp[lst][s];
}
void ask(int lst,int s){
	int t=nxt[lst][s];
	if(!t)
		return;
 	if(f(x[lst]-x[t])+f(y[lst]-y[t])>f(x[lst]-y[0])+f(y[lst]-y[0])+f(x[t]-x[0])+f(y[t]-y[0]))
		putchar(' '),putchar('0');
	printf(" %d",t);
	ask(t,s|(1<<t-1));
}
int main(){
	cin>>x[0]>>y[0];
	cin>>n;
	for(int i=1;i<=n;++i)
		cin>>x[i]>>y[i];
	cout<<dfs(0,0)<<endl;
	putchar('0');
	ask(0,0);
	putchar(' '),putchar('0');
	return 0;
}
2022/9/19 23:22
加载中...