Advertisement
asdfg0998

Untitled

Nov 20th, 2024
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.91 KB | None | 0 0
  1. struct State {
  2.     int row, col, value, deviceUsed;
  3. };
  4.  
  5. const vector<pair<int, int>> directions = {{1, 0}, {1, -1}, {1, 1}};
  6.  
  7. int getMaxPseudoRandomNumber(vector<vector<int>>& unitType, int n, int m, int k) {
  8.     vector<vector<vector<int>>> dp(n, vector<vector<int>>(m, vector<int>(2, -1)));
  9.     queue<State> q;
  10.  
  11.     for (int j = 0; j < m; j++) {
  12.         q.push({0, j, 0, 0});
  13.         dp[0][j][0] = 0;
  14.     }
  15.  
  16.     int maxValue = -1;
  17.  
  18.     while (!q.empty()) {
  19.         State current = q.front();
  20.         q.pop();
  21.  
  22.         int r = current.row, c = current.col, val = current.value, used = current.deviceUsed;
  23.  
  24.         for (auto [dr, dc] : directions) {
  25.             int nr = r + dr, nc = c + dc;
  26.  
  27.             if (nr < 0 || nr >= n || nc < 0 || nc >= m) continue;
  28.  
  29.             int newValue = val;
  30.             if (unitType[nr][nc] == 1) newValue++;
  31.             else if (unitType[nr][nc] == 2) newValue--;
  32.  
  33.             if (newValue < 0) continue;
  34.  
  35.             int newUsed = used;
  36.             if (used == 0 && unitType[nr][nc] == 2) {
  37.                 vector<vector<int>> tempUnitType = unitType;
  38.                 for (int i = nr; i < min(n, nr + k); i++) {
  39.                     for (int j = 0; j < m; j++) {
  40.                         if (tempUnitType[i][j] == 2) {
  41.                             tempUnitType[i][j] = 0;
  42.                         }
  43.                     }
  44.                 }
  45.                 newUsed = 1;
  46.                 if (dp[nr][nc][newUsed] < newValue) {
  47.                     dp[nr][nc][newUsed] = newValue;
  48.                     q.push({nr, nc, newValue, newUsed});
  49.                 }
  50.                 continue;
  51.             }
  52.  
  53.             if (dp[nr][nc][newUsed] < newValue) {
  54.                 dp[nr][nc][newUsed] = newValue;
  55.                 q.push({nr, nc, newValue, newUsed});
  56.                 if (nr == n - 1) maxValue = max(maxValue, newValue);
  57.             }
  58.         }
  59.     }
  60.  
  61.     return maxValue;
  62. }
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement