The Battle of Chibi
前言
绿题继续自己想
思路
转化题意,
\(T\) 组数据, 在长度为 \(n\) 的数列 \(a\) 中, 求出长度为 \(m\) 的严格上升子序列的个数
怎么做?
还是先考虑朴素做法, 令 \(f_{i, j}\) 表示考虑到 \(a_i\) , 现在严格上升子序列的个数为 \(j\) 的情况数
有, \(f_{0, 0} = 1\)
\[f_{i, j} = \sum_{a_k < a_i}^{0 \leq k < i} f_{k, j - 1}
\]
这个复杂度显然是 \(\mathcal{O} (n^2m)\) 的, 慢, \(\rm{what \ can \ I \ say}\)
坏了, 绿都做不出来了???
考虑这个很像 \(\rm{LIS}\) 问题的变式, 于是我们去看看怎么优化 \(\rm{LIS}\) 问题
\(\rm{LIS}\) 问题用树状数组维护当前以 \(i\) 结尾的 \(f_i\) 最大值, 那么同样的, 我们可以维护以 \(i\) 结尾的 \(f_{i, j}\) 的值, 然后树状数组求 \(\max\) 即可
实现
不管了, 比较好些
总结
善于优化神秘柿子

浙公网安备 33010602011771号