P2150 [NOI2015]寿司晚宴

考虑我们关心什么信息:每个寿司被谁选了。这个是 \(O(3^n)\) 的。

但我们其实只关心一个信息:当前状态是否合法。这个是 \(O(1)\) 的。

显然后者过于简单以至于我们无法转移状态,考虑折中一点,我们想知道是否合法,想在新加入一个寿司的时候判断是否合法,那么我们需要知道每一个质因子被谁选了,这是 \(O(3^{\pi(n)})\) 的,而 \(\pi(500)\) 显然太大了,我们要继续精简。

状态基本已经到头了,考虑怎么通过改变更新顺序的方法来降低复杂度。有一个典中典结论是 \(n\) 至多有一个 \(\geq \sqrt{n}\) 的质因子。我们考虑按照这个质因子给这些数分组,每一组中显然至多选一个。这个是 \(O(3^{\pi(\sqrt{n})})\) 的,很优秀了。

总复杂度大概是 \(O(n \cdot 3^{\pi(\sqrt{n})})\)

posted @ 2023-02-21 16:54  PYD1  阅读(19)  评论(0)    收藏  举报