状态压缩dp1
#include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 20,M = 1 << 20; int n; int w[N][N]; //1、哪些点被用过 //2、目前停在哪个点上 int f[M][N]; int main() { cin >> n; for(int i = 0;i < n;i ++) { for(int j = 0;j < n;j ++) { cin >> w[i][j]; } } memset(f,0x3f,sizeof f); f[1][0] = 0; for(int i = 0;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) { f[i][j] = min(f[i][j],f[i - (1 << j)][k] + w[k][j]); } } } } } cout << f[(1 << n) - 1][n - 1] << endl; }
Mamba never out

浙公网安备 33010602011771号