CodeForces 699C Vacations (贪心)

题目: 传送门
思路: 不能连续两天干同一件事,从贪心的角度我们每次可以让连续的第二天休息,因为如果选择第二天对后面的选择只有两种可能,影响 (即第三天跟第二天相同) 或者不影响(即第三天跟第二天不相同),如果不影响,我们选择 第一天休息和第二天休息的结果不影响,如果影响,我们当然选择第二天休息更优,综上所述,我们每次都选则第二天休息就可以了.

对于两件事都能干的那天,我们尽量保证这天不休息,我们可先看前一天可不可以确定这一天干什么,再确定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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值