状压dp, WA on #5以及hack数据全WA,玄关求条
  • 板块P1433 吃奶酪
  • 楼主JenF
  • 当前回复2
  • 已保存回复3
  • 发布时间2024/11/29 16:11
  • 上次更新2024/11/29 19:14:31
查看原帖
状压dp, WA on #5以及hack数据全WA,玄关求条
807667
JenF楼主2024/11/29 16:11
#include<bits/stdc++.h>
using namespace std;
int n;
double f[1<<15][30],ans;
struct node{
    double x,y;
}a[30];
double dis(node aa,node b){
    return sqrt((aa.x-b.x)*(aa.x-b.x)+(aa.y-b.y)*(aa.y-b.y));
}
void init(){
    ans=0x7f;
    memset(f,0x7f,sizeof(f));
}
signed main(){
    //freopen("test.in","r",stdin);
    //freopen("test.out","w",stdout);
    init();
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
        scanf("%lf%lf",&a[i].x,&a[i].y);
        f[1<<(i-1)][i]=dis((node){0,0},a[i]);
        //cout<<(1<<(i-1))<<' '<<i<<' '<<f[1<<(i-1)][i]<<endl;
    }
    for(int i=1;i<(1<<n);i++){
        for(int j=1;j<=n;j++){
            if(((i>>(j-1))&1)==0) continue;
            for(int k=1;k<=n;k++){
                if(k==j) continue;
                if(((i>>(k-1))&1)==0) continue;
                f[i][j]=min(f[i][j],f[i-(1<<(j-1))][k]+dis(a[j],a[k]));
            }
        }
    }
    for(int i=1;i<=n;i++) ans=min(ans,f[(1<<n)-1][i]);
    printf("%.2lf",ans);
}
2024/11/29 16:11
加载中...