Guest User

everybodycodes S2 Q1 Part 3

a guest
Aug 27th, 2025
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. pair<int,int> part3(const vector<string>& grid, const vector<string>& sequence) {
  2.     constexpr int INF = 1e9;
  3.     const int n = (int)grid[0].size(), slots = (n + 1) / 2, tokens = (int)sequence.size(), m = 1 << tokens;
  4.     vector winnings(slots, vector<int>(tokens));
  5.     for (int slot = 0; slot < slots; slot++) {
  6.         for (int token = 0; token < tokens; token++)
  7.             winnings[slot][token] = max(0, runSlot(grid, n, slot * 2, sequence[token]) * 2 - slot - 1);
  8.     }
  9.     vector dp_min(m, INF), dp_max(m, 0);
  10.     dp_min[0] = 0;
  11.     for (int slot = 0; slot < slots; slot++) {
  12.         for (int mask = m - 1; mask > 0; mask--) {
  13.             int mask1 = mask;
  14.             while (mask1) {
  15.                 const int token = __builtin_ctz(mask1);
  16.                 dp_min[mask] = min(dp_min[mask], dp_min[mask - (1 << token)] + winnings[slot][token]);
  17.                 dp_max[mask] = max(dp_max[mask], dp_max[mask - (1 << token)] + winnings[slot][token]);
  18.                 mask1 -= 1 << token;
  19.             }
  20.         }
  21.     }
  22.     return {dp_min.back(),dp_max.back()};
  23. }
Add Comment
Please, Sign In to add comment