DP练!习!
DP练!习!
都是水题啊 Made By M1kuFan
1 洛谷 P2513
求长度为 ,逆序对个数为 的排列有多少个,答案对 取模
其中:
仅考虑从大到小向序列中插入每个数的位置,当前插入到了第 个。最少的时候对答案贡献为0,即插入到已有序列的最右边;最多的时候对答案的贡献为 ,即插入到了最右边。因此,排列中从小到大的第一个数对答案的贡献为 ,第 个数对答案的贡献为 。
所以原问题转化为:构造一个长度为 的序列,令序列中第 个数为 求满足 , 且的方案数
不难写出从大到小枚举的转移方程:
表示长度为 的序列和为 的方案数 ()
枚举 表示第 个数选了什么,则:
边界:
前缀和优化或者吸一口氧+循环展开即可优秀地通过此题
2 简单题
给出一个 的网格,你现在需要用 个 的多米诺骨牌覆盖满整个网格(可以横着或者竖着放),求方案书
考虑现在进行到了第 列, 表示第 列之前(包含第 列)全部放满的方案数,有以下两种情况:
- 竖着放:则
- 横着放:若横着放,则两行都应该是横着的,则
所以:
边界:,
3.1 简单题2 ABC312D
给定一个为 的仅包含左括号、右括号、问号的序列,问号可以变成右括号或左括号,求最终的到合法括号序列的方案数量,答案对998244353取模。
把左括号当成 ,右括号当成 。
令 表示枚举到第 个数,所有数的和 的方案数
转移有以下下情况:
- 当前是左括号,则:
- 当前是右括号,则:
- 当前是问号,则:
注意 不要越界
边界:
3.2 学霸题(简单题2加强版)CF314E
给定一个长度为 的仅包含左括号和问号的序列,求最终得到合法括号序列的方案数量,答案对4294967296取模(注意给定括号序列不包含右括号)
,注意时限给到了4s
上面 的枚举显然不足以通过此题,所以我们要优!化!
注意到当右括号大于当前长度的一半的话,就会寄,一定不合法
所以我们可以把状态中的和为 改成右括号的个数为 。这样就减少了一半的枚举量
当前元素为左括号时
注意到 仅由上一层转移,所以我们可以滚!掉第一维
这样我们就可以仅在当前元素为问号时转移
另外模数是 要开unsigned int 自然溢出。
然后我们就可以优雅地通过此题
4 BZOJ2466
线性DP做腻了,来道树形DP!
给定一棵树,每个节点有一盏指示灯和一个按钮。如果节点的按扭被按了,那么该节点的灯会从熄灭变为点亮(当按之前是熄灭的),或者从点亮到熄灭(当按之前是点亮的)。并且该节点的直接邻居也发生同样的变化。
开始的时候,所有的指示灯都是熄灭的。请编程计算最少要按多少次按钮,才能让所有节点的指示灯变为点亮状态。
树形DP经典思路:根据儿!子!来确定父!亲!, 除非他没!有!儿!子!
不难想到以下思路:
我们不仅需要考虑一个点是开着还是关着,还需要关心一个点是否操作过,因为儿子的操作会影响到父亲,不难设计出如下状态,
代表保证 的子树中的点全都是开着的情况下:使 是关着/开着并且 操作过/未操作过的最小操作数
转移方程分情况讨论即可,非常简单:
注意树形DP计算时要开中间变量避免错误
边界:
(不合法)
答案:
本文作者:Hasselblad
本文链接:https://www.cnblogs.com/mikufun4405/p/17815213.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步