1 条题解

  • 0
    @ 2026-9-17 15:32:13

    #include <bits/stdc++.h>

    using namespace std;

    const int N = 20, M = 1 << 20;

    int n, f[M][N], weight[N][N];

    int main() {

    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 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] + weight[k][j]);
    			
          }
    		
        }
    		
      }
    
    }
    

    cout << f[(1 << n) - 1][ n - 1];

    return 0;

    }

    信息

    ID
    15259
    时间
    1000ms
    内存
    512MiB
    难度
    6
    标签
    递交数
    41
    已通过
    7
    上传者