萌新刚学状压dp求助样例不过
  • 板块P1433 吃奶酪
  • 楼主S0CRiA
  • 当前回复0
  • 已保存回复0
  • 发布时间2021/8/14 17:48
  • 上次更新2023/11/4 10:40:42
查看原帖
萌新刚学状压dp求助样例不过
390770
S0CRiA楼主2021/8/14 17:48
//P1433
#include <bits/stdc++.h>
using namespace std;

const int N = 20;
double x[N], y[N], dp[1<<N][N], ans = 0x3f3f3f3f;
int n;

double getdis(int i, int j){
	return sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
}

int main(){
	scanf("%d", &n);
	for(int i = 0; i < n; ++ i){
		scanf("%lf%lf", &x[i], &y[i]);
	}
	memset(dp, 127, sizeof(dp));
	dp[1][0] = 0;
	for(int i = 1; i < 1 << n; ++ i)
		for(int j = 0; j < n; ++ j) if(i >> j & 1)
			for(int k = 0; k < n; ++ k) if((i^1<<j) >> k & 1)
				dp[i][j] = min(dp[i][j], dp[i^1<<j][k] + getdis(j, k));
	for(int i = 0; i < n; ++ i)
		ans = min(ans, dp[i][(1<<n)-1] + getdis(i, n));
	printf("%.2lf", ans);
	return 0;
}
2021/8/14 17:48
加载中...