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 @   Yorg  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
点击右上角即可分享
微信分享提示