fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define int long long
  4. #define dd double
  5. #define ld long double
  6. #define ull unsigned long long
  7. #define yes cout << "YES\n"
  8. #define no cout << "NO\n"
  9. #define el "\n"
  10. #define Arwa ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  11. #define fix(x) cout << fixed << setprecision(x)
  12. #define all(v) v.begin(),v.end()
  13. #define dpp(v,val) memset(v,val,sizeof(v))
  14. #define mod 1e9+7
  15. #define oo 1e9
  16. const int N = 1e5 + 5;
  17. int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } // log(n) __gcd(a,b)
  18. //todo اى ويل بريبير ماى بيبرز تو بى ذا بيست ان زيس وورلد
  19. int n;
  20. vector<int>v;
  21. int dp[102][4];
  22. int solve(int i,int j)
  23. {
  24. if(i==n) return 0;
  25. int& ret=dp[i][j];
  26. if(ret!=-1) return ret;
  27. int l=solve(i+1,j),t=0;
  28. if(j==0)
  29. {
  30. if(v[i]==0) t=solve(i+1,v[i]);
  31. else if(v[i]==3) t=max(solve(i+1,2),solve(i+1,1))+1;
  32. else t=solve(i+1,v[i])+1;
  33. }
  34.  
  35. if(j==1)
  36. {
  37. if(v[i]==0) t=solve(i+1,v[i]);
  38. else if(v[i]==3||v[i]==2) t=solve(i+1,2)+1;
  39. }
  40.  
  41. if(j==2)
  42. {
  43. if(v[i]==0) t=solve(i+1,v[i]);
  44. else if(v[i]==3||v[i]==1) t=solve(i+1,1)+1;
  45. }
  46. return ret=max(t,l);
  47. }
  48. void HereWeGoAgain()
  49. {
  50. cin>>n;
  51. v.resize(n);
  52. for(int i=0;i<n;i++) cin>>v[i];
  53. dpp(dp,-1);
  54. cout<<n-solve(0,0);
  55. }
  56. int32_t main()
  57. {
  58. Arwa
  59. int t=1;
  60. //cin>>t;
  61. for(int i=1;i<=t;i++)
  62. {
  63. HereWeGoAgain();
  64. }
  65. return 0;
  66. }
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Standard output is empty