CF39A C*++ Calculations [Medium+]

题目传送门

考虑枚举做法也就是 \(n\) 个项的全排列,对每个顺序模拟计算过程,记录最大值。这对数据范围小的还可以接受但本题数据范围无法接受我们全排列的时间复杂度为 \(\Theta(n! \times n)\) 明显会超时。

所以我们考虑更优的做法,贪心加上排序。

我们先明确题目对于任意相邻的两项,应该谁先计算,才能使这两项的总贡献更大?

我们注意到我们计算到后面这里面的 \(a\) 会越大,那么我们就有思路了。

我们先去计算系数小的然后去计算系数大的因为这样我们就可以确保利益最大化。那么我们可以把所有系数来一个排序。我们该怎么排呢?

我们定义每个项的权重为 \(w\)

那么每个项的权重:\(w = s \cdot c\)\(s\) 为符号,\(c\) 为系数)。

我们计算一遍权重然后排序按照排序后的计算一遍即可。

时间复杂度为 \(\Theta(n \log n)\) 那么对于这道题这个做法就十分有优势了。

aclink

posted @ 2025-12-14 21:09  AstraeusGleam  阅读(4)  评论(0)    收藏  举报