11.19 CW 模拟赛 T3.又见 LIS

前言#

老登你也知道你又在出 LIS

算法#

首先我们需要注意到, 本质上和随机了一个 1n 的排列没有任何区别
具体的, 任意一个 LIS 数列, 都仅仅是由大小关系推过来的, 并且可以证明, LIS 数列相同, 当且仅当大小关系完全相同

注意到这个之后(事实上我注意不到) , 我们可以拿到暴力的 20%

先考虑全是 0 的情况
注意到 LIS 的数列, 必须满足

a1=1,aimaxj<i(aj+1),ai1

dpi,j 表示考虑了前 i 位, 其中 maxk<i(ak)=j 时可能性数量
转移是显然的 (注意最大值一次只能变化 1)

dpi,j=jdpi1,j+dpi1,j1

考虑 ai 被指定的情况
有,

dpi,j=dpi1,j,j>ai

dpi,ai=dpi1,ai1+dpi1,ai

现在我们需要考虑 ai=1 的情况
由于这一位不受关注, 我们直接填上最大的可能, 即

dpi,j=dpi1,j1

具体的, 只要填上最大的数, 后面所有的可能都可以被考虑到

时间复杂度 O(n2)

代码#

总结#

一般来说, 可以将约束条件加入 dp 柿子方便递推

这个题中, 关键信息是 : 最大值一次变化量最大为 1

积累一下, 思路确实非常好, 善于利用 Subtask 推到正解

还是需要多联系 dp

posted @   Yorg  阅读(16)  评论(0编辑  收藏  举报
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示