题目链接: Vacations
大致题意:
有三种状态:0表示休息,1表示学习,2表示运动,三表示学习运动二选一
给出n种状态,问最少可以休息几天(连续两天不能做同一件事)
解题思路:
dp[i][j]来表示第i天做j事的最小休息天数
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 200, INF = 0x3f3f;
int n;
int a[N];
int f[N][4];
int main() {
cin >> n;
for (int i = 1; i <= n; ++i)cin >> a[i];
memset(f, INF, sizeof f);
f[0][0] = 0;
for (int i = 1; i <= n; i++)
{
f[i][0] = min(f[i - 1][0], min(f[i - 1][1], f[i - 1][2])) + 1;
if (a[i] == 1 || a[i] == 3)
f[i][1] = min(f[i - 1][0], f[i - 1][2]);
if (a[i] == 2 || a[i] == 3)
f[i][2] = min(f[i - 1][0], f[i - 1][1]);
}
cout << min(f[n][0], min(f[n][1], f[n][2])) << endl;
return 0;
}