序列与数组相关算法解析
1. 序列相关问题
1.1 非递减子序列
在寻找子序列时,如果不要求严格递增,仅需非递减,那么查找方式会有所不同。原本是寻找满足 $b[k - 1] < x[i] \leq b[k]$ 的 $k$,现在则要找满足 $b[k - 1] \leq x[i] < b[k]$ 的 $k$,在 Python 中可以使用 bisect_right 函数来实现。
1.2 最长公共递增子序列
给定两个序列 $x$ 和 $y$,要找出它们的最长公共递增子序列。可以先对 $y$ 排序得到序列 $z$,然后寻找 $x$、$y$、$z$ 的公共子序列,这种方法的时间复杂度为立方级别。不过,2005 年 Yang 等人发表了时间复杂度为 $O(|x| \cdot |y|)$ 的更好算法,而这个复杂度在 2003 年的 ACM/ICPC/NEERC 竞赛中就已用于解决相关问题。
1.3 简单最长递增子序列问题
有一个名为 [spoj:ELIS] 的问题,涉及简单最长递增子序列的求解。
2. 两人游戏的获胜策略
2.1 游戏定义
有一个由两个玩家参与的游戏,游戏基于一个正整数栈。玩家 0 先开始,如果栈为空,玩家 0 输;若栈顶元素为整数 $x$,玩家 0 有两个选择:弹出一个元素或者弹出 $x$ 次(仅当栈中至少有 $x$ 个元素时可选择后者),然后轮到玩家 1 操作,以此类推。给定一个包含 $n$ 个整数的栈 $P$,问题是玩家 0 是否有获胜策略,即无论玩家 1 如何选择,玩家 0 都能获胜。
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



