3 条题解

  • 1
    @ 2025-8-7 19:56:03

    `

    #include <bits/stdc++.h> using namespace std; const int N = 520; const int INF = 0x3f3f3f3f; int f[1<<N][N], weight[N][N]; int main() { int n; cin >> n; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> weight[i][j];

    memset(f, 0x3f, sizeof(f));
    f[1][0] = 0; 
    
    for(int mask = 0; mask < (1<<n); mask++) {
        for(int j = 0; j < n; j++) {
            if((mask >> j) & 1) { // 
                for(int k = 0; k < n; k++) {
                    if(!((mask >> k) & 1)) { 
                        f[mask|(1<<k)][k] = min(f[mask|(1<<k)][k], f[mask][j] + weight[j][k]);
                    }
                }
            }
        }
    }
    
    cout << f[(1<<n)-1][n-1] << endl;
    return 0;
    

    } //一路向北 `

    信息

    ID
    4
    时间
    5000ms
    内存
    128MiB
    难度
    3
    标签
    递交数
    177
    已通过
    101
    上传者