dp[i][j]用来表示第i天做第j件事情所能休息的最少天数。
dp[i][0]=min(dp[i][0],min(dp[i-1][1],dp[i-1][2]))+1表示第i天休息
dp[i][1]=min(dp[i-1][0],dp[i-1][2])表示第i天运动
dp[i][2]=min(dp[i-1][0],dp[i-1][1])表示第i天打比赛
#include<bits/stdc++.h>
using namespace std;
const int inf=0x3f3f3f3f;
int dp[110][3];
int main(){
int n;
while(cin>>n){
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++){
int x;
cin>>x;
dp[i][0]=min(dp[i-1][0],min(dp[i-1][1],dp[i-1][2]))+1;
if(x==1||x==3){
dp[i][1]=min(dp[i-1][0],dp[i-1][2]);
}
else dp[i][1]=inf;
if(x==2||x==3){
dp[i][2]=min(dp[i-1][0],dp[i-1][1]);
}
else dp[i][2]=inf;
if(x==0){
dp[i][1]=inf;
dp[i][2]=inf;
}
}
cout<<min(dp[n][0],min(dp[n][1],dp[n][2]))<<endl;
}
}