文章目录

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\)
结合加法在前、乘法在后的规则,对比两种方案:

  1. 两次都加法:\(S+b_i+b_j\)
  2. \(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\)
  1. 全部选乘法:结果为 \(S\cdot K\)
  2. 选中第 \(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 润色

posted @ 2026-09-15 20:58  lvwangshu  阅读(33)  评论(0)    收藏  举报