Official

G - Count Strictly Increasing Sequences Editorial by m_99


\(\mathrm{dp}_{i,j,k}\) を「\(S_i,S_{i+1},\ldots,S_{j-1}\) において上から \(k+1\) 桁目以降を決める方法であって、上から \(k+1\) 桁目以降のみを見ると \(S_i \lt S_{i+1} \lt \ldots \lt S_{j-1}\) となるようなものの個数」とします。ここで、対象の区間内において上から \(k+1\) 桁目はインデックスの増加に対して広義単調増加であり、さらに \(k+1\) 桁目が同じ数字の区間では上から \(k+2\) 桁目以降のみを見た時に単調増加となっている必要があります。よって、\(S_i,S_{i+1},\ldots,S_{j-1}\) を上から \(k+1\) 桁目が 0, 1, \(\ldots\), 9 の区間に分ける方法をdpで考慮しながら求めれば良いです。具体的には、\(\mathrm{dp}_{i,j,k,l}\) を「\(S_i,S_{i+1},\ldots,S_{j-1}\) において上から \(k+1\) 桁目以降を決める方法であって、上から \(k+1\) 桁目以降のみを見ると \(S_i \lt S_{i+1} \lt \ldots \lt S_{j-1}\) となり、先頭から \(0\) 個以上の \(k+1\) 桁目の数字が \(l\) であるようなものの個数」とすると \(\mathrm{O}(N^3Mb)\) で求められます( \(b\) は数字の種類数)。

posted:
last update: