- 首先这后一天和前一天得许多状态相关,那必然使用动态规划。
- 假设加验证得思想可以加快解题速度
#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; }