题解:P14056 【MX-X21-T1】[IAMOI R5] 七休制

· · 题解

解题思路

这道题的核心是要安排加训、休息和颓废三种活动,使得疲劳度为0的天数尽可能多。

初始疲劳度为0,三种活动对疲劳度的影响分别是:

加训:疲劳度+1

休息:疲劳度不变

颓废:疲劳度-1

我们需要找到最优的安排策略,关键观察点在于:

  1. 休息天的疲劳度保持不变,所以如果某一天是休息日且当天疲劳度为0,它必然会贡献1天的有效天数
  2. 加训和颓废是一对可以相互抵消的活动:一次加训后再进行一次颓废,疲劳度会回到0

基于以上观察,最优策略是:

代码解析

#include<bits/stdc++.h>
using namespace std;
int main() 
{
    int a, b, c;
    cin>>a>>b>>c;
    // 计算加训和颓废能形成的最大抵消对数
    int k = min(a, c);
    // 总有效天数 = 抵消对数(每对贡献1天) + 休息天数(每天贡献1天)
    int ans = k + b;
    cout << ans << endl;
    return 0;
}

代码的核心逻辑是:

  1. 计算加训(a)和颓废(c)的最小数量,这是能形成的完整抵消对数
  2. 每对抵消能产生1天疲劳度为0的日子
  3. 所有休息日(b)都能贡献1天疲劳度为0的日子
  4. 总和就是最大可能的疲劳度为0的天数