题解:P14056 【MX-X21-T1】[IAMOI R5] 七休制
superman__ · · 题解
解题思路
这道题的核心是要安排加训、休息和颓废三种活动,使得疲劳度为
初始疲劳度为
加训:疲劳度
休息:疲劳度不变
颓废:疲劳度
我们需要找到最优的安排策略,关键观察点在于:
- 休息天的疲劳度保持不变,所以如果某一天是休息日且当天疲劳度为
0 ,它必然会贡献1 天的有效天数 - 加训和颓废是一对可以相互抵消的活动:一次加训后再进行一次颓废,疲劳度会回到
0
基于以上观察,最优策略是:
- 首先用尽量多的加训-颓废组合,每组这样的组合可以产生
1 天疲劳度为0 的日子(颓废的那天) - 所有的休息日都可以安排在疲劳度为0的时候,因此每个休息日都能贡献1天有效天数
代码解析
#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;
}
代码的核心逻辑是:
- 计算加训(a)和颓废(c)的最小数量,这是能形成的完整抵消对数
- 每对抵消能产生1天疲劳度为0的日子
- 所有休息日(b)都能贡献1天疲劳度为0的日子
- 总和就是最大可能的疲劳度为0的天数