Advertisement
Josif_tepe

Untitled

Nov 7th, 2021
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4. using namespace std;
  5. int dp[30005][3];
  6. int main()
  7. {
  8.     int n;
  9.     cin >> n;
  10.     vector<int> v(n);
  11.     for(int i = 0; i < n; i++) {
  12.         cin >> v[i];
  13.         v[i]--;
  14.         dp[i][0] = dp[i][1] = dp[i][2] = 2e9;
  15.     }
  16.     int result = 2e9;
  17.         dp[0][0] = (v[0] != 0);
  18.         dp[0][1] = (v[0] != 1);
  19.         dp[0][2] = (v[0] != 2);
  20.        
  21.         for(int i = 1; i < n; i++) {
  22.             for(int j = 0; j <= 2; j++) {
  23.                 for(int k = 0; k <= j; k++) {
  24.                     dp[i][k] = min(dp[i][k], dp[i - 1][j] + (v[i] != k));
  25.                 }
  26.             }
  27.         }
  28.        
  29.     result = min(result, dp[n - 1][0]);
  30.     result = min(result, dp[n - 1][1]);
  31.     result = min(result, dp[n - 1][2]);
  32.    
  33.     for(int i = 0; i < n; i++) {
  34.        
  35.         dp[i][0] = dp[i][1] = dp[i][2] = 2e9;
  36.  
  37.     }
  38.         reverse(v.begin(), v.end());
  39.         dp[0][0] = (v[0] != 0);
  40.         dp[0][1] = (v[0] != 1);
  41.         dp[0][2] = (v[0] != 2);
  42.        
  43.         for(int i = 1; i < n; i++) {
  44.             for(int j = 0; j <= 2; j++) {
  45.                 for(int k = 0; k <= j; k++) {
  46.                     dp[i][k] = min(dp[i][k], dp[i - 1][j] + (v[i] != k));
  47.                 }
  48.             }
  49.         }
  50.    
  51.     result = min(result, dp[n - 1][0]);
  52.     result = min(result, dp[n - 1][1]);
  53.     result = min(result, dp[n - 1][2]);
  54.    
  55.     cout << result << endl;
  56.     return 0;
  57. }
  58.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement