洛谷 P5307

给定 \(h \times w\) 的矩阵 \(a\) 以及正整数 \(n\),问有多少条从 \((1, 1)\) 走到 \((h, w)\) 的路径使得路径上所有数乘积 \(\ge n\)

\(h, w \le 300, 1 \le a_{i, j}, n \le 10^6\)

有一个十分明显的 DP:令 \(dp_{i, j, k}\) 表示走到 \((i, j)\) 乘积为 \(k\) 的方案数,暴力转移即可。时间复杂度:\(O(hwn)\),爆掉了。

尝试改动这个状态,因为 \(i, j\) 都是需要保留的,只能动 \(k\)。可以将状态设为走到 \((i, j)\) 还需要乘 \(k\) 才能到 \(n\)

然后惊奇的发现:\(k\) 只有 \(2\sqrt n\) 种(整除分块),做完了。

时间复杂度:\(O(hw\sqrt n)\)。(可能需要滚动一下。)

想到一个暴力的 DP 状态,将 \(k\) 从现在的乘积转变为还需要多少,运用 \(n / k\) 只有 \(O(\sqrt n)\) 种结果优化状态

posted @ 2025-11-07 21:13  xiehanrui0817  阅读(4)  评论(0)    收藏  举报