Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "bits/stdc++.h"
- #define ll long long
- using namespace std;
- ll n, a[105];
- ll dp[3][3][105];
- // last day done (gym isg = 1) contest (isc = 1) else 0;
- ll f(ll isg, ll isc, ll day){
- if(day == n) return 0;
- if(dp[isg][isc][day] != -1) return dp[isg][isc][day];
- if(a[day] == 0){
- return dp[isg][isc][day] = 1 + f(0, 0, day+1);
- }
- else if(a[day] == 1){
- if(isc == 0) return dp[isg][isc][day] = min(f(0, 1, day+1), 1 + f(0, 0, day+1));
- else return dp[isg][isc][day] = 1 + f(0, 0, day+1);
- }
- else if(a[day] == 2){
- if(isg == 0) return dp[isg][isc][day] = min(f(1, 0, day+1), 1 + f(0, 0, day+1));
- else return dp[isg][isc][day] = 1 + f(0, 0, day+1);
- }
- else if(a[day] == 3){
- if(!isg && !isc) return dp[isg][isc][day] = min(f(1, 0, day+1), f(0, 1, day+1));
- else if(!isg) return dp[isg][isc][day] = min(f(1, 0, day+1), 1 + f(0, 0, day+1));
- else return dp[isg][isc][day] = min(f(0, 1, day+1), 1 + f(0, 0, day+1));
- }
- }
- int main(){
- cin >> n;
- memset(dp, -1, sizeof dp);
- for(int i = 0; i < n; i++) cin >> a[i];
- cout << f(0, 0, 0);
- return 0;
- }
Add Comment
Please, Sign In to add comment