P8365 [LNOI2022] 吃(贪心) 题解
P8365 [LNOI2022] 吃(贪心) 题解
算法:贪心
题目大意
给定 \(n\) 个二元组 \((a_i,b_i)\),可以任意排列操作顺序。初始值 \(S=1\),对每个二元组二选一:
\[S \leftarrow S+b_i \quad \text{或} \quad S \leftarrow S\times a_i
\]
求最终能得到的最大值,答案对 \(10^9+7\) 取模。
核心贪心策略推导
结论1:加法操作一定全部放在乘法之前
所有数值均为正数。
设当前值为 \(x>0\),先加后乘:\((x+b)\cdot a\);先乘后加:\(x\cdot a + b\)。
作差:
\[(x+b)a - (xa+b) = b(a-1)
\]
因为 \(b\ge1,a\ge1\),所以 \((x+b)a \ge xa+b\)。
推论:想要结果最大,所有加法必须排在乘法前面,操作顺序无需考虑其他排列。
结论2:\(a_i=1\) 时,必然选择加法
若 \(a_i=1\):
- 乘法:\(S\times 1 = S\),数值无变化
- 加法:\(S+b_i > S\)
因此所有 \(a_i=1\) 的二元组直接执行加法,累加到初始值,之后不再参与后续枚举。
结论3:\(a_i\neq 1\) 时,至多选择一个二元组做加法 !
使用反证法:
假设对两个不同二元组 \((a_i,b_i),(a_j,b_j)\)(\(a_i,a_j\ge2\))都执行加法,不妨设 \(b_i \ge b_j\)。
结合加法在前、乘法在后的规则,对比两种方案:
- 两次都加法:\(S+b_i+b_j\)
- 仅 \(b_i\) 加法、\(a_j\) 乘法:\((S+b_i)\cdot a_j\)
由于 \(a_j\ge2\)、\(b_i\ge b_j\):
\[(S+b_i)\cdot a_j \ge (S+b_i)\cdot 2 = 2S+2b_i \ge S+b_i+b_j
\]
显然第二次操作改为乘法更优。
推论:\(a_i\ge2\) 的二元组中,最多只选一个执行加法,其余全部执行乘法。
结论4:选出最优加法项
设:
- 预处理完所有 \(a_i=1\) 后,当前基数为 \(S\);
- 记所有 \(a_i\ge2\) 的乘积为 \(K=\prod a_i\)。
- 全部选乘法:结果为 \(S\cdot K\)
- 选中第 \(i\) 个做加法、其余做乘法:结果为 \(\displaystyle \frac{K\cdot (S+b_i)}{a_i}\)
对比两类方案,等价于比较:
\[S \quad \boldsymbol{vs} \quad \frac{S+b_i}{a_i}
\]
所以:只需在所有 \(a_i\ge2\) 的二元组中,选出 \(\boldsymbol{\dfrac{S+b_i}{a_i}}\) 最大的一项作为唯一加法项,即可得到全局最大值。
部分内容由 AI 润色
晨雾纸间
山中何事?松花酿酒,春水煎茶
文/lvwangshu·书于云深处
晨雾纸间
✦
原创·转载请注明出处
✦
浙公网安备 33010602011771号