【做题记录】ARC068D Solitaire
-
- 算法:dp
题目:
将 顺序加入双端队列(每次可加头可加尾),再删除(每次可删头可删尾),求有多少种删除序列,使得 是第 个被删的。
。
题解:
这里是一个 的做法,在这篇题解中有 的线性做法。
考虑这个双端队列长什么样:应该是一个以 为分割点,左边是一个单调下降序列,右边是单调上升序列。
考虑删除的第 个点要是 ,弹出时是选择两端中的一端弹出,拆开弹出的序列,一部分为前端弹出的数,另一部分为后端弹出的数,于是这两部分就是单调递减的,且前 个数中其中一个序列的最小值一定大于后 个数中的最大值。
然后因为在确定了 的位置后,之后随便删除,所以剩下的随便排序,有 种。
直接 dp: 表示前 个数中前 个数,这些数的最小值为 。
考虑下一个数 与 的大小关系:
-
。
-
总时间复杂度 。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15815365.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步