YEZAELP

SMMR-242: Dancing Zemo

Jun 5th, 2021 (edited)
1,118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4. const int N = 1e4;
  5. char str[N+10];
  6. int dp[N+10][5][5];
  7. int L;
  8.  
  9. int convert(char a){
  10.     if(a == 'L') return 1;
  11.     else if(a == 'R') return 2;
  12.     else if(a == 'U') return 3;
  13.     else if(a == 'D') return 4;
  14. }
  15.  
  16. int DP(){
  17.  
  18.     for(int l = 1; l <= 4; l ++){
  19.         for(int r = 1; r <= 4; r ++){
  20.             dp[L][l][r] = (l == convert(str[L-1]) or r == convert(str[L-1]));
  21.         }
  22.     }
  23.  
  24.     for(int i = L-1; i >= 1; i --){
  25.         for(int l = 1; l <= 4; l ++){
  26.             for(int r = 1; r <= 4; r ++){
  27.                 if(l == r) continue;
  28.                 if(l == convert(str[i-1]) or r == convert(str[i-1])) dp[i][l][r] = 1 + dp[i+1][l][r];
  29.                 else {
  30.                     if(l != convert(str[i-1])) dp[i][l][r] = max(dp[i][l][r], dp[i+1][l][convert(str[i-1])]);
  31.                     if(r != convert(str[i-1])) dp[i][l][r] = max(dp[i][l][r], dp[i+1][convert(str[i-1])][r]);
  32.                 }
  33.             }
  34.         }
  35.     }
  36.  
  37.     return dp[1][1][2];
  38. }
  39.  
  40. void Setting(){
  41.     for(int i = 0; i <= N; i ++){
  42.         for(int l = 1; l <= 4; l ++){
  43.             for(int r = 1; r <= 4; r ++){
  44.                 dp[i][l][r] = 0;
  45.             }
  46.         }
  47.     }
  48. }
  49.  
  50. int main(){
  51.  
  52.     int n;
  53.     scanf("%d", &n);
  54.  
  55.     for(int i=1;i<=n;i++){
  56.         scanf("%s", str);
  57.         L = strlen(str);
  58.         printf("%d\n", DP());
  59.         Setting();
  60.     }
  61.  
  62.     return 0;
  63. }
  64.  
Add Comment
Please, Sign In to add comment