Loading

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\) 即可

实现

不管了, 比较好些

总结

善于优化神秘柿子

posted @ 2024-12-16 16:34  Yorg  阅读(21)  评论(0)    收藏  举报