Vjudge 计数dp 总结

written on 2022-03-20

通过这次的计数dp,我学到了许多

计数dp是一个很大的板块,里面的题型很多样,许多题目还要和组合数学结合在一起求解

接下来 是具体题目分析

A题相对来说比较基础了,属于入门dp,预处理出因数,然后进行转移即可。评测机跑得快这样就能直接过

B题概率dp,之前专题放过。用\(f[i][j]\)表示时间与已上来的人数(题目很明确的状态),那么分类转移就可以了,然后注意转移细节,即若已经上了所有人,那只有不上人的情况就不用乘以概率了

C题是dp与组合数学相结合的一道题,观察到总格子数很多,不能经过的却很少,于是将每一个不能经过的作为一个阶段,每个阶段就是原本的方案数 减去 之前不能到的点转移过来的方案数,用组合数算

D题数位dp,刚开始想错了,将09状压,但09有多个所以不行,于是对每一位是否出现进行状压,因为最多18位,于是再数位dp就好了

E题的话。。。太难了,题解也看不懂,斯特林数是啥?贝尔数是啥?以后再看吧

F题是简单的概率dp,理解题意后,用\(f[i]\) 表示前i个人不存在同组的概率,这样转移就好写了

G题,数学期望,数学期望是线性的,于是分别考虑两个人,\(Jeff\) 一次操作可以减少一个逆序对,\(Fruik\) 一次操作可以减少一个或增加一个逆序对,故对于每两次操作,0.5概率减少两个逆序对,0.5概率不变,共可以期望减少一个逆序对,亦即减少一个逆序对期望操作数为2。最后,若逆序对奇数个,那么最后一次直接到达,总次数减一

H题的话相对综合,数位dp预处理出有区间内有k个4和7的数的个数,然后用排列的dfs乱搞。

I题甚是有趣,也用到了组合数学的知识,看了题解之后,深有启发。最初思路是用容斥来写,但是状态数太多显然不行,题解的话倒序枚举了dp数组,这样就可以用减去倍数来保证不重复

J题,矩阵加速递推,这类题写的很少,前一次放专题时在同学的帮助下写好了,以后还要多写来巩固(其实转移也是蛮重要的)

K题题意理解后是一道思维题,看这篇题解吧,其实有点难度的

L题,大受震撼,只用组合数学就能方便的求解,本来还想着怎么记下复杂的状态,结果居然不用dp。以后看到这样难想的dp状态和较大的数据范围还是要留心是不是组合数学

M题的关键在于发现答案的单调性,证明略,然后二分答案进行数位dp就好了

N题的话,刚开始状态设计有误,昏昏沉沉地写了好久没写出来,后来题解告诉我可以转化问题,即前n个数和为k的总方案数,这样就好写了,预处理完就可以O(Tn)回答

O题的状态很难想,可能也是对于树的状态设计的一种新的方法吧,而且边界也极其难设,这种题还是要多看看

P题的状态设计也比较无语,看了题解才知道,\(f[t][i][j]\)表示已处理t行,还剩下i行有一个1没填,j行有两个1没填,这样子的话用 \(O(n^3)\)的时间复杂度进行转移,其中也穿插了一点点组合数学的知识

Q题相对套路了许多,考虑每个数的贡献,然后单对这个数进行讨论,枚举加号的位置,其它加号的可能情况用组合数来算,在解题过程中,发现可以用前缀和优化到能过的时间复杂度,这样就能求解了

配上每题名称(都是CF的):

A Mashmokh and ACM

B Ilya and Escalator

C Gerald and Giant Chess

D Roman and Numbers

E Symmetric and Transitive

F Basketball Team

G Jeff and Furik

H Little Elephant and Elections

I Winter is here

J PLEASE

K Increase Sequence

L Games with Rectangle

M Random Task

N Cipher

O How many trees?

P Special Matrices

Q Pluses everywhere

posted @ 2022-07-31 17:07  Freshair_qprt  阅读(94)  评论(0编辑  收藏  举报