TSP的状压dp写法
周赛打的跟个纸张一样,T6 模数
AT 和 CF Rating 与校内比赛成绩成反比,而且都很拉。
原问题
从一个点出发,不重不漏经过所有
-
n \le 15
没有多项式时间复杂度解法,但由于点很少,可以状压。
首先,最后一个点是
#include <bits/stdc++.h>
#define N 21
using namespace std;
int a[N][N], dp[1 << N][N], n, ans = 2e9;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cin >> n;
for(int i = 0; i < n; i++) for (int j = 0; j < n; j++) cin >> a[i][j];
memset(dp, 0x3f, sizeof(dp));
dp[1][0] = 0;
for(int s = 1; s < (1 << n); s++) for(int i = 0; i < n; i++) {
if ((s >> i) & 1) for(int j = 0; j < n; j++) {
if ((s >> j) & 1) continue;
dp[s | (1 << j)][j] = min(dp[s | (1 << j)][j], dp[s][i]+a[i][j]);
}
}
cout << dp[(1 << n)-1][n-1];
return 0;
}
新问题
从一个点出发,经过所有
-
n \le 15
还是
转移
同上。