蒟蒻状压dp求调
  • 板块P1433 吃奶酪
  • 楼主Anahita
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/7/15 21:03
  • 上次更新2023/10/27 20:08:17
查看原帖
蒟蒻状压dp求调
425330
Anahita楼主2022/7/15 21:03

RT

#include <bits/stdc++.h>
using namespace std;
int n;
double x[30],y[30];
double f[1<<16][16];
double dis(int i,int j){
	return sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
}
int main(){
	cin>>n;
	n+=1;
	x[1] = 0;
	y[1] = 0;
	for(int i = 2;i<=n;i++){
		cin>>x[i]>>y[i]; 
	}
	for(int i = 0;i<1<<16;i++){
		for(int j = 1;j<=n;j++){
			f[i][j] = 0x3f3f3f3f3f;
		}
	}
	f[0][0] = 0;
	for(int i = 1;i<=n;i++){
		f[1<<(i-1)][i] = dis(1,i);
	}
	for(int i = 0;i<1<<16;i++){
		for(int j = 1;j<=n;j++){
			for(int k = 1;k<=n;k++){
				if((i&(1<<(j-1)))&&((i-(1<<(j-1)))&k)){
					f[i][j] = min(f[i][j],f[i-(1<<(j-1))][k]+dis(k,j));
				}
			}
		}
	}
	double ans = 0x3f3f3f3f;
	for(int i = 1;i<=n;i++){
		ans = min(ans,f[(1<<n)-1][i]);
	}
	printf("%.2f",ans);
	return 0;
	
}
2022/7/15 21:03
加载中...