本题O2的力量为何如此巨大
查看原帖
本题O2的力量为何如此巨大
537934
litjohn楼主2024/11/3 12:35

rt。

#include <bits/stdc++.h>

using namespace std;
int n;
array<array<int, 25>, 25> dis;
array<array<int, 25>, (1 << 21) + 1> dp;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n;
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= n; ++j) {
            cin >> dis[i][j];
        }
    }

    for (unsigned int i = 1; i < (1 << n); ++i) {
        fill(dp[i].begin(), dp[i].end(), 2e9);
    }
    dp[1][1] = 0;

    for (unsigned int i = 1; i < (1 << n); ++i) {
        for (int j = 1; j <= n; ++j) {
            if (i & (1 << (j - 1))) {
                for (int k = 1; k <= n; ++k) {
                    if (!(i & (1 << (k - 1)))) {
                        dp[i | (1 << (k - 1))][k] = min(dp[i | (1 << (k - 1))][k], dp[i][j] + dis[j][k]);
                    }
                }
            }
        }
    }
    cout << dp[(1 << n) - 1][n];
    return 0;
}

这份代码在开了O2的情况下最大点不到500ms,不开O2最后两个点都超过1200ms。

2024/11/3 12:35
加载中...