社区讨论
求条,悬棺
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 条回复,欢迎继续交流。
正在加载回复...