Salvens

B

Aug 2nd, 2023
962
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <algorithm>
  2. #include <iostream>
  3. #include <iomanip>
  4. #include <vector>
  5. #include <array>
  6. #include <set>
  7. #include <map>
  8.  
  9. using namespace std;
  10.  
  11. #define int long long
  12.  
  13. const long long INF = 1e18 + 7;
  14. const int MAXN = 1e1 + 100;
  15. const int N = 3e5 + 10;
  16. const int MOD = 1e9 + 7;
  17.  
  18. array<int, MAXN> cost;
  19. int baff[MAXN][MAXN];
  20. int dp[N][MAXN];
  21.  
  22. signed main() {
  23.     ios_base::sync_with_stdio(false);
  24.     cin.tie(nullptr);
  25.     cout.tie(nullptr);
  26.  
  27.     int n, m, k;
  28.     cin >> n >> m >> k;
  29.     for (int i = 0; i < n; ++i) {
  30.         cin >> cost[i];
  31.     }
  32.     for (int i = 0; i < k; ++i) {
  33.         int x, y, c;
  34.         cin >> x >> y >> c;
  35.         --x, --y;
  36.         baff[x][y] = c;
  37.     }
  38.     for (int i = 0; i < n; ++i) {
  39.         dp[1 << i][i] = cost[i];
  40.     }
  41.     for (int mask = 0; mask < (1 << n); ++mask) {
  42.         for (int v = 0; v < n; ++v) {
  43.             if (mask & (1 << v)) {
  44.                 for (int u = 0; u < n; ++u) {
  45.                     if (!(mask & (1 << u))) {
  46.                         int new_mask = mask | (1 << u);
  47.                         dp[new_mask][u] = max(dp[new_mask][u], dp[mask][v] + cost[u] + baff[v][u]);
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.     }
  53.     int ans = 0;
  54.     for (int mask = 0; mask < (1 << n); ++mask) {
  55.         if (__builtin_popcountll(mask) == m) {
  56.             for (int v = 0; v < n; ++v) {
  57.                 ans = max(ans, dp[mask][v]);
  58.             }
  59.         }
  60.     }
  61.     cout << ans << '\n';
  62. }
Advertisement
Add Comment
Please, Sign In to add comment