44pts求助
查看原帖
44pts求助
1106763
wjc20230920楼主2024/11/26 09:12
#include <bits/stdc++.h>
using namespace std;
int dp[1 << 20][20];
int dis[20][20], ans = 0;
int main() {
    int n, m;
    cin >> n >> m;
    memset(dp, -0x3f, sizeof(dp));
    for (int i = 1; i <= m; i++) {
        int x, y, l;
        cin >> x >> y >> l;
        dis[x][y] = l;
    }
    dp[1][0] = 0;
    for (int i = 1; i <= (1 << n) - 1; i++) {
        for (int j = 0; j < n; j++) {
            if (j == n - 1)
                ans = max(ans, dp[i][n - 1]);
            if (!(i >> j & 1))
                continue;
            for (int k = 0; k < n; k++) {
                if (dis[j][k] && !((i >> k) & 1))
                    dp[i | 1 << k][k] = max(dp[i | k][k], dp[i][j] + dis[j][k]);
            }
        }
    }
    cout << ans;
}
2024/11/26 09:12
加载中...