社区讨论

求条,悬棺

AT_abc274_e[ABC274E] Booster参与者 41已保存回复 58

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
58 条
当前快照
1 份
快照标识符
@lz3w9bl7
此快照首次捕获于
2024/07/27 16:53
2 年前
此快照最后确认于
2026/03/07 10:32
4 天前
查看原帖
CPP
#include<bits/stdc++.h>
#define ld double
using namespace std;
const int N=19;
ld ans,dp[1<<N][N],w[N][N];
int x[N],y[N],n,m;
ld  odj(int x,int y,int o,int p)
{
	return sqrt((x-o)*(x-o)+(y-p)*(y-p));
}
int Q(int x)
{
	int cnt=0;
	x=x>>n+1;
	for(;x;x-=(x&-x))
		cnt++;
	return cnt;
}
int main()
{
	for(int i=0;i<(1<<N);i++)
		for(int j=0;j<N;j++)
			dp[i][j]=1e9;
 	cin>>n>>m;
 	int i=1,g=n+m+1;
	for(i=1;i<=n;i++)
		cin>>x[i]>>y[i];
	for(;i<g;i++)
		cin>>x[i]>>y[i];
	for(i=0;i<=g;i++)
		for(int j=0;j<=g;j++)
			w[i][j]=odj(x[i],y[i],x[j],y[j]);
	dp[1][0]=0;
	for(int i=0;i<(1<<g);i++)
		for(int j=0;j<g;j++)			
			if((i>>j)&1)
				for(int k=0;k<g;k++)
					if(((i>>k)&1))
						dp[i][j]=min(dp[i][j],dp[i^(1<<j)][k]+w[k][j]/(1<<Q(i^(1<<j))));
	int o=(1<<n+1)-1;
	ld ans=1e9;
	for(int i=0;i<(1<<m);i++)
	{
		for(int j=0;j<g;j++)
		{
			int x=o+(i<<(n+1));
//			cout<<bitset<sizeof(x)*8>(x);
//			printf(" %.7Lf %d\n",dp[o+(i<<(n+1))][j]+w[0][j]/(1<<Q(x)),Q(x));
			ans=min(ans,dp[x][j]+w[0][j]/(1<<Q(x)));
		}
	}	
	printf("%.10lf",ans);
	return 0;
}
WA on #5

回复

58 条回复,欢迎继续交流。

正在加载回复...