Advertisement
Josif_tepe

Untitled

Feb 10th, 2022
705
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.08 KB | None | 0 0
  1.     #include <iostream>
  2.     #include <queue>
  3.     #include <vector>
  4.     #include <cstring>
  5.     using namespace std;
  6.     int n;
  7.     string a;
  8.     int memo[2][4][4][4][4];
  9.     int main() {
  10.         cin >> n;
  11.         cin >> a;
  12.         for(int i = 0; i < 2; i++) {
  13.             for(int l1 = 0; l1 < 4; l1++) {
  14.                 for(int l2 = 0; l2 < 4; l2++) {
  15.                     for(int r1 = 0; r1 < 4; r1++) {
  16.                         for(int r2 = 0; r2 < 4; r2++) {
  17.                             memo[i][l1][l2][r1][r2] = -2e9;
  18.                         }
  19.                     }
  20.                 }
  21.             }
  22.         }
  23.  
  24.         memo[0][0][0][0][0] = 0;
  25.        
  26.         for(int i = 0; i < n; i++) {
  27.             for(int l1 = 0; l1 < 4; l1++) {
  28.                 for(int l2 = 0; l2 < 4; l2++) {
  29.                     for(int r1 = 0; r1 < 4; r1++) {
  30.                         for(int r2 = 0; r2 < 4; r2++) {
  31.                             int now = i % 2;
  32.                             int next = 1 - now;
  33.                             vector<bool> visited(4, false);
  34.                             int color;
  35.                             if(a[i] == 'R') {
  36.                                 color = 1;
  37.                             }
  38.                             else if(a[i] == 'Y') {
  39.                                 color = 2;
  40.                             }
  41.                             else {
  42.                                 color = 3;
  43.                             }
  44.                             visited[color] = true;
  45.                             visited[l1] = true;
  46.                             visited[l2] = true;
  47.                             int score = visited[1] + visited[2] + visited[3];
  48.                            
  49.                             memo[next][color][l1][r1][r2] = max(memo[next][color][l1][r1][r2], memo[now][l1][l2][r1][r2] + score);
  50.                             visited[1] = false;
  51.                             visited[2] = false;
  52.                             visited[3] = false;
  53.                            
  54.                             visited[color] = true;
  55.                             visited[r1] = true;
  56.                             visited[r2] = true;
  57.                            
  58.                             score = visited[1] + visited[2] + visited[3];
  59.                            
  60.                             memo[next][l1][l2][color][r1] = max(memo[next][l1][l2][color][r1], memo[now][l1][l2][r1][r2] + score);
  61.                            
  62.                                                            
  63.                         }
  64.                     }
  65.                 }
  66.             }
  67.         }
  68.        
  69.         int result = 0;
  70.         for(int i = 0; i < 2; i++) {
  71.             for(int l1 = 0; l1 < 4; l1++) {
  72.                 for(int l2 = 0; l2 < 4; l2++) {
  73.                     for(int r1 = 0; r1 < 4; r1++) {
  74.                         for(int r2 = 0; r2 < 4; r2++) {
  75.                             result = max(result, memo[i][l1][l2][r1][r2]);
  76.                         }
  77.                     }
  78.                 }
  79.             }
  80.         }
  81.         cout << result << endl;
  82.         return 0;
  83.     }
  84.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement