90分,有个点wa了,请大佬改改

P1433 吃奶酪

```cpp #include<bits/stdc++.h> const double inf=0x7f7f7f7f7f7f7f7f; const int N=201; int n; double dis[N][N]; double x[N],y[N]; double dp[1<<16][N]; double cal(int a,int b){ return sqrt((x[a]-x[b])*(x[a]-x[b])+(y[a]-y[b])*(y[a]-y[b])); } int main(void){ std::ios::sync_with_stdio(false),std::cin.tie(nullptr);//std::cout.tie(nullptr); std::cin>>n; x[0]=y[0]=0; for(int i=1;i<=n;++i)std::cin>>x[i]>>y[i];//枚举第一个点即可 memset(dis,0x7f,sizeof(dis)); for(int i=1;i<=n;++i)dis[i][i]=0; for(int i=1;i<=n;++i){ for(int j=i+1;j<=n;++j)dis[i][j]=dis[j][i]=cal(i,j); } memset(dp,0x7f,sizeof(dp)); for(int i=1;i<=n;++i)dp[1<<(i-1)][i]=0; for(int mask=0;mask<(1<<n);++mask){ for(int i=1;i<=n;++i){ if(~mask>>(i-1)&1||dp[mask][i]==inf)continue; for(int j=1;j<=n;++j){ if(mask>>(j-1)&1||dis[i][j]==inf)continue; dp[mask|1<<(j-1)][j]=std::min(dp[mask|1<<(j-1)][j],dp[mask][i]+dis[i][j]); } } } double ans=inf; for(int i=1;i<=n;++i){ ans=std::min(ans,dp[(1<<n)-1][i]+cal(0,i)); } printf("%.2lf",ans); return 0; } ```
by jayket @ 2024-01-29 22:06:45


|