codeforces #round363 div2.C-Vacations (DP)

时间:2024-01-06 16:38:32

题目链接:http://codeforces.com/contest/699/problem/C

dp[i][j]表示第i天做事情j所得到最小的假期,j=0,1,2。

#include<bits/stdc++.h>
using namespace std;
const int INF=0x3f3f3f3f;
int dp[105][3];
int main()
{
int n;
scanf("%d",&n);
memset(dp,INF,sizeof(dp));
dp[0][0] = dp[0][1] = dp[0][2] = 0;
for(int i = 1 ;i <= n ;i++)
{
int x;
scanf("%d",&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]);
if(x == 2||x == 3)
dp[i][2] = min(dp[i-1][0],dp[i-1][1]);
}
printf("%d\n",min(dp[n][0],min(dp[n][1],dp[n][2])));
return 0;
}