「2022-8-10/11 做题记录」组合数 / DP

组合数还要再练练

很多时候并不是一个组合数,而是用 dp 套 组合数

CF367E Sereja and Intervals
考虑每个位置被哪些区间覆盖到。设其为 [l,r]

有个性质:既然一个区间不会覆盖另一个区间,所以不可能两个区间共用左端点 / 右端点。

发现从一个位置移到下一个位置,l 最多会加 1r 最多会加 1

那么我们就有一个 O(n2m) 的显然 dp。

但是我还以为这个会 T 卡了 1h ...

其实 nm105,nm,所以 n2m105105

emm... 可以滚动数组。做完了。

但是好像可以抽象成笛卡尔坐标系考虑。转为组合数。胡了一下,时间复杂度是 O(n2)


CF140E New Year Garland
发现考虑下一层的时候,这一层具体的颜色不用管,有影响是颜色的种类个数。


CF1237F Balanced Domino Placements
md 骨牌有顺序,什么垃圾题面。

也就是说,我们要统计用了多少骨牌。最后乘阶乘。

暴力 dpn,m,k 表示现在剩下 n 行,m 列,选了 k 个骨牌的方案数。

但是大可不必考虑横着的骨牌,因为选完竖着的过后它就可以直接计算。其实是,横着和竖着可以独立计算。

所以现在为 dp1i,j 为选到第 i 行,选了 j 个竖着的骨牌的方案数。

dp1i,j=dp1i1,j+dp1i2,j1

注意这里不能乘具体地放哪个位置的系数。

dp2 同理。

最后组合。


CF1536F Omkar and Akmar
难点在第一步啊。

考虑 最终状态,不可能存在连续两个空格,去掉空格必须是 ABABAB...。

所以最后的步数一定是偶数。后手必赢。

所以随便选了。emm..... 其实可以爆搜找规律 / 猜结论。

然后组合数算即可。枚举空格。

刚开始推出来 ans=i=0n2(n2i)×(2i)!

发现这个式子好像也能适配链的情况。。那就错了。。。


CF1188C Array Beauty
暴力 dp:dpi,j,k 为最后一项为 i,长度为 j,现在的 mink 的方案数。

dpi,j,min(k,|bibj|)=dplas,j1,k

。。。

发现:k<100000j,所以 dp 空间开不下,但是时间可以跑。。。具体地,你会说,当前状态与现有的决策点取 min 不应该有很多值吗?怎么 O(1) 转。其实,我们不是枚举上一个状态,而是枚举当前状态,这样的话,min 就不会变,用前缀和优化即可。

那么既然 dp 数组里面维度多,我们就枚举维度,具体地,枚举最后的 min

做完了。O(105n)


CF1295F Good Contest
能不能离散化后只关注端点?
可以。暴力转 dp 即可。注意遍历到的所有点都必须在离散化数组里面(也就是说,Ri+1(1) 要在离散化数组里面,或者全部改成左闭右开也可以)


CF1523E Crypto Lights


CF814E An unavoidable detour for home

一道很 NB 的 DP 题,需要深刻的对 DP 及其技巧的理解

编号可以根据图动态钦定?

首先有个结论:跑 bfs 树,剩下的边是同层的相连。这与原题是充要关系。

推出一个三维 dp,不知道行不行。(

就是一层一层选,令 dpi,c1,c2 为选了 i 个,最后一层有 c1 个剩下度数为 1c2 个度数为 2 的方案数。然后一层一层枚举,好像要设置辅助 dp。O(n4) 是能转的。

具体看看刚才那个 dp,发现只要我们最后一层的节点定了,c1,c2 都定了。(因为每个点只会和层数 - 1的某一个点连边)

所以令 dpi,j 为选了 i 个,最后一层有 j 个节点的方案数。

我们 钦定算到下一层的时候才去处理上一层连上一层、这一层连上一层的情况

gi,j,k 为当前层 i 个节点,上一层有 j 个剩下度数为 1 的节点,k 个剩下度数为 2 的节点的方案数。

  • i=0,j=0,k=0,方案数为 1

  • i=0,j=0,k0,发现是由多个简单环组成(size3
    g0,0,k=i=3k(k1i1)(i!)/i/2g0,0,ki
    (P.S. 并不是 g0,0,k=i=3k(ki)(i!)/i/2g0,0,ki。因为这样会因为选的顺序不同而出现多种重复方案。我们钦定强制选包括最后一个点的环)

  • i=0,j0,k0,枚举度数为 1 的点与谁连,g0,j,k=g0,j2,k(j1)+g0,j1,k1k

  • i0,j0,k0,枚举这一层的点与谁连,gi,j,k=gi1,j1,kj+gi1,j,k1k

dpi,j=k=1ijdpij,kgj,c1,c2c1,c2[ijk+1,ij] 中度数为 2,3 的点个数。

答案即为 i=1ndpn,ig0,c1,c2

发现计算 g 的复杂度不是 n4 而是 n3,计算 dp 的复杂度是 n3,所以时间复杂度为 O(n3)


CF1111D Destroy the Colony
能否和字符集有关?

诈骗点 1:询问次数其实不是 105,是 5252

考虑暴力:背包 dp,n525252

然而我们发现这里面有很多重复计算的东西

能不能搞个前缀和背包,本质上是高维前缀和。

背包进行的顺序并不影响值。

1055252 能不能过啊?答案是可以的。

好像有个名字叫退背包。


Character Encoding
简单容斥排列组合。


Separated Number
如果我强制令某一个数是第几位,方案数可以用组合数算。

对于某个 10i,用前缀和算出上面可以有多少 19,然后进行 “盒子与球” 算出方案数。

注意这里有类似 (x0)+(x1)+...+(xk) 的东西。

因为 "k" 固定,想到与 (x10)+(x11)+...+(x1k) 联系。算二次即可。递推。

fi=fi12(i1k)。时间复杂度:O(Tn)


Tom and matrix
lucas+组合数。


Xiao Ming's Hope
用 lucas 证明得 ans=21


Interesting Yang Yui Triangle
lucas 板题。但是降智了想了好久。。。原因是把题读反了。

但是,如果题目真的变成了求余数为 0 的个数,这个题这样做也要方便些,这就是 正难则反


posted @   Saintex  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示