洛谷 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)\) 种结果优化状态。
浙公网安备 33010602011771号