1 条题解

  • 0
    @ 2022-7-6 21:03:50

    dp

    #include <bits/stdc++.h>
    using namespace std;
    const int N = 20;
    int f[1 << N], a[N][N], n;
    int popcount(int S) {
    	int res = 0;
    	do if (S & 1) res ++; while (S >>= 1);
    	return res;
    }
    int main() {
    	cin >> n;
    	memset(f, 0x3f, sizeof f), f[0] = 0;
    	for (int i = 1; i <= n; i ++)
    		for (int j = 1; j <= n; j ++)
    			cin >> a[i][j];
    	for (int i = 0; i < 1 << n; i ++) {
    		int k = popcount(i);
    		for (int j = 1; j <= n; j ++)
    			if (i & 1 << (j - 1))
    				f[i] = min(f[i], f[i ^ 1 << (j - 1)] + a[k][j]);
    	}
    	cout << f[(1 << n) - 1] << '\n';
    	return 0;
    }
    
    • 1

    信息

    ID
    135
    时间
    1000ms
    内存
    256MiB
    难度
    5
    标签
    (无)
    递交数
    119
    已通过
    46
    上传者