状态压缩dfs求助
  • 板块P1433 吃奶酪
  • 楼主gl0526
  • 当前回复1
  • 已保存回复1
  • 发布时间2022/4/25 11:18
  • 上次更新2023/10/28 02:56:26
查看原帖
状态压缩dfs求助
563802
gl0526楼主2022/4/25 11:18
#include<bits/stdc++.h>
using namespace std;
int n;
double loc[20][2], dp[1048575];

double GetDis(int idx0, int idx1) {
  return sqrt((loc[idx0][0] - loc[idx1][0]) * (loc[idx0][0] - loc[idx1][0]) +
              (loc[idx0][1] - loc[idx1][1]) * (loc[idx0][1] - loc[idx1][1]));
}

void dfs(int p, int cur) {
  for (int i = 1; i <= n; ++i) {
    if ((p >> i & 1)==0) {
      if (dp[p | (1 << i)] > dp[p] + GetDis(i, cur)) {
        dp[p | (1 << i)] = dp[p] + GetDis(i, cur);
        dfs(p | (1 << i), i);
      }
    }
  }
}

int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%lf%lf", &loc[i][0], &loc[i][1]);
  std::fill(dp, dp + 1048575, INT_MAX);
  dp[0] = 0;
  dfs(0, 0);
  int m = pow(2, n + 1) - 2;
  printf("%.2lf\n", dp[m]);
  
  return 0;
}

只有五十分,大佬求助

2022/4/25 11:18
加载中...