Advertisement
mickypinata

SMMR-T092: Boss Room

Apr 2nd, 2020
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. typedef long long lli;
  6.  
  7. /// DR D DL
  8. int ctrl[3] = {1, 0, -1};
  9. int board[1010][1010];
  10. int row, col;
  11.  
  12. vector<vector<int>> memo;
  13. int KillBoss(int r, int c){
  14.     if(memo[r][c] != -2){
  15.         return memo[r][c];
  16.     }
  17.     if(r == row){
  18.         if(board[r][c] < 5000){
  19.             return memo[r][c] = 5500 - board[r][c];
  20.         }
  21.         return memo[r][c] = -1;
  22.     } else {
  23.         int mx = -1;
  24.         for(int i = 0; i < 3; ++i){
  25.             if(c + ctrl[i] > 0 && c + ctrl[i] <= col){
  26.                 if(KillBoss(r + 1, c + ctrl[i]) > board[r][c]){
  27.                     mx = max(mx, KillBoss(r + 1, c + ctrl[i]));
  28.                 }
  29.             }
  30.         }
  31.         return memo[r][c] = (mx == -1) ? -1 : mx + 500 - board[r][c];
  32.     }
  33. }
  34.  
  35. int main(){
  36.  
  37.     int x;
  38.  
  39.     scanf("%d %d", &row, &col);
  40.     for(int i = 1; i <= row; ++i){
  41.         for(int j = 1; j <= col;++j){
  42.             scanf("%d", &x);
  43.             board[i][j] = x;
  44.         }
  45.     }
  46.     int mx = -1;
  47.     memo.assign(row + 1, vector<int>(col + 1, -2));
  48.     for(int i = 1; i <= col; ++i){
  49.         mx = max(mx, KillBoss(1, i));
  50.     }
  51.     if(mx == -1){
  52.         cout << -1;
  53.     } else {
  54.         cout << row * 500 + 5000 - mx;
  55.     }
  56.  
  57.     return 0;
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement