题目: 传送门
思路: 不能连续两天干同一件事,从贪心的角度我们每次可以让连续的第二天休息,因为如果选择第二天对后面的选择只有两种可能,影响 (即第三天跟第二天相同) 或者不影响(即第三天跟第二天不相同),如果不影响,我们选择 第一天休息和第二天休息的结果不影响,如果影响,我们当然选择第二天休息更优,综上所述,我们每次都选则第二天休息就可以了.
对于两件事都能干的那天,我们尽量保证这天不休息,我们可先看前一天可不可以确定这一天干什么,再确定last的值(具体看代码)。
int main() {
int n;
cin>>n;
int ans = 0;
int last = 0; // 前一天的状态 , 0为休息
for(int i=0;i<n;i++) {
int a;
cin>>a;
if(a == 0) ans++; //如果这天只能休息
if(a != 3&&a!=0) { //如果这天只能干一件事
//cout<<a<<' '<<last<<endl;
if(last != 3&&last == a) { //如果前面 不能干 与 a 不同的事 ,a就休息
ans ++;
last = 0 ;
continue;
}
}
if(a == 3) { // 这天两件事都可以干
//cout<<last<<endl;
if(last!=0&&last!=3) { //看前面能不能确定这天要干啥
last = (3-last);
continue;
}
else if(last == 3) {
last = 3;
continue;
}
}
last = a;
}
cout<<ans<<endl;
return 0;
}