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;
    

    } //一路向北 `

    • 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

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

    • 0
      @ 2025-4-26 18:30:56

      #include #include using namespace std; int n, x; struct node { int int find(int num) { int l = 0, r = n-1; while (l <= r) { int mid = (l + r) / 2; if (num == a[mid].num) return a[mid].id; else if (num < a[mid].num) r = mid - 1; else l = mid + 1; } return -1; } bool cmp(node x, node y) { return x.num < y.num; } int main() { cin >> n; for (int i = 0; i < n; i++) { cin >> a[i].num; a[i].id = i+1; } sort (a, a + n,cmp); cin >> x; for (int i = 0; i < n; i++) { cout << a[i].num << " "; } cout << endl; int findnum = find(x); if(findnum == -1) cout << "吃饱喝足"; else cout << findnum << endl; }

      • 1

      信息

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