- 首先这后一天和前一天得许多状态相关,那必然使用动态规划。
- 假设加验证得思想可以加快解题速度
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
int x;
vector<int> c,fit;
cin>>n;
for(int i =0; i< n;i++){
cin>>x;
c.push_back(x);
}
for(int i =0; i< n;i++){
cin>>x;
fit.push_back(x);
}
//和前面得状况有关系(3个状态种,到底i天的最大天数,休息日不用加1)
vector<vector<int>> dp(3,vector<int>(n+1,0));//动归,默认初始化为0
dp[0][0] = dp[1][0] = dp[2][0] = 0;
for(int i = 1; i<=n;i++){
//休息最大天数(后面无需加1)
dp[0][i] = max(dp[0][i-1],max(dp[1][i-1],dp[2][i-1]));
if(c[i-1]){
dp[1][i] = max(dp[0][i-1],dp[2][i-1]) + 1;
}
if(fit[i-1]){
dp[2][i] = max(dp[0][i-1],dp[1][i-1]) + 1;
}
}
//减去最大得就是休息得日子
cout<<n - max(dp[0][n],max(dp[1][n],dp[2][n]))<<endl;
return 0;
}