5 条题解

  • 1
    @ 2025-10-8 21:37:15
    
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    
    const int N = 20;
    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; // 初始状态:只访问过0号点
        
        for(int mask = 0; mask < (1<<n); mask++) {
            for(int j = 0; j < n; j++) {
                if((mask >> j) & 1) { // j必须在mask中
                    for(int k = 0; k < n; k++) {
                        if(!((mask >> k) & 1)) { // k不能在mask中
                            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;
    }
    
    
    
    • 0
      @ 2026-11-1 18:39:35

      #include #include #include using namespace std;

      const int N = 20; 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;
      

      }

      • 0
        @ 2026-6-14 19:45:09
        
        #include <iostream>
        #include <cstring>
        #include <algorithm>
        using namespace std;
        
        const int N = 20;
        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;
        }
        • 0
          @ 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;
          

          } //一路向北 `

          • 0
            @ 2025-5-17 20:27:09
            
            #include <iostream>
            #include <cstring>
            #include <algorithm>
            using namespace std;
            
            const int N = 20;
            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; // 初始状态:只访问过0号点
                
                for(int mask = 0; mask < (1<<n); mask++) {
                    for(int j = 0; j < n; j++) {
                        if((mask >> j) & 1) { // j必须在mask中
                            for(int k = 0; k < n; k++) {
                                if(!((mask >> k) & 1)) { // k不能在mask中
                                    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;
            }
            
            
            • @ 2025-5-18 21:13:21

              整治题解区. 现在的题解就是这样吗?

            • @ 2025-9-9 17:13:56

              土哥有实力

          • 1

          信息

          ID
          4
          时间
          5000ms
          内存
          128MiB
          难度
          2
          标签
          递交数
          266
          已通过
          169
          上传者