码迷,mamicode.com
首页 > 其他好文 > 详细

计数类问题专题

时间:2016-05-13 15:06:20      阅读:322      评论:0      收藏:0      [点我收藏+]

标签:

主要是前两天被uoj的毛爷爷的题虐的不轻,心里很不爽啊,必须努力了,,
计数类问题分为:1.组合数学及数论计数
2.dp:状态压缩dp,插头轮廓线dp,树形dp,数位dp,普通dp
3.容斥原理
4.polya原理
5.图论计数
6.生成函数
7.其它(生成树计数等等)
本文主要研究前3个内容
考虑基本计数原理:加法原理,减法原理,乘法原理,除法原理
计数的基本原则:结果不重不漏
加法原理比较自然,中间过程有时减法原理
考虑到无向,有向图的各种量值(生成树之类)计数,状态压缩dp解决

论文:http://wenku.baidu.com/link?url=A5g_2tVjFJL6aDL8aIdBXrfWr_QjSpcPBJ6qk8YzX97sMsMDas4so2pc3qbWfTeuKobjU9OaXnuoQHEqz0ojpqHSn5saiQ_-3ixNIbQW61q
1.bzoj 状态压缩dp(包括插头dp,轮廓线dp,容斥原理等):
1042 1068 1072 1076 1087 1097 1187 1195,1210 1226 1231 1419 1494 1688 1853 1879 1948
2005 2121 2024 2064 2310 2331 2393 2440 2595 2669 2734 2839 2916
3094 3125 3129 3195 3198 3269 3589 3622 3771 3812 3925
4006 4008 4086 4145 4197 4416 4558
hzwer:http://hzwer.com/category/algorithm/dp/state-compression/page/3
http://hzwer.com/category/algorithm/dp/state-compression/page/3
1.题目名称:4558: [JLoi2016]方

通过情况:unAC

关键词:容斥原理 + 分类讨论

思路:虽然数据范围很大,但这种扣掉点的东西往往是要容斥的,考虑如何容斥,转化为求包含其中若干个点的方案数
1.包含一个点的(很好统计) O(K) 2.包含两个点的:分成同一行,同一列,同一斜行的方案,直接暴力点对O(K^2) 3.包含3个或4个点的,枚举2的第三种情况时直接判断一下相应位置就好 4.不可能存在超过4个的点,其实,按关键点dp也是可以的啦,只不过麻烦一些,,,

复杂度:O(k^2)

总结:不要被数据范围吓怕而不敢容斥,容斥原理不一定是指数级别的复杂度
,加深对于容斥原理的研究(数学)

注意情况:无

2.题目名称:4416: [Shoi2013]阶乘字符串

通过情况:unAC

关键词:容斥原理 背包dp

思路:考虑到直接判定不好做,我们可以把判定性问题转化为计数问题,即计算串S有多少不同的n排列,这里要用到容斥原理了,容斥一下枚举2^n然后求C(len - num,26),发现复杂度超高啊,然而,考虑贡献发现len - num只有450个值,于是背包一下然后暴力计算就好,这里复杂度变得很奇怪是因为要用高精度吧。
总有一些容斥原理说要搞掉重复,我表示无法理解,我所理解的容斥原理不就是一坨限制条件,考虑本题如何转化为限制,首先选出一个S的子序列,然后满足的限制条件是a属于S(n),b属于等等,于是我们可以用容斥原理了。

总结:加深容斥原理的限制抽象和直观感受(重要)

注意情况:无

3.题目名称:4197: [Noi2015]寿司晚宴

通过情况:unAC(题解)(!!!)

关键词:状压dp 分块

思路:原谅我在好久之前比现在还naive的时候看过这道题的题解,虽然当时没看大懂但这题也不算是自己做出来的了吧,so sad。
先留着吧,再想想好了

复杂度:

总结:

注意情况:

4.题目名称:4145: [AMPPZ2014]The Prices

通过情况:unAC

关键词:状态压缩dp

思路:最优值问题,m只有16,于是考虑状压dp。设f[i][S]表示前i个商店,买的商品集合为S的最优值,暴力转移,即枚举剩余的没选的集合进行转移,复杂度超高,貌似会TLE,表示无奈。我的解决方案是meet in the middle,也不知道对不对。转移复杂度非常高,然而考虑到将商店分为两部分,一定是前面选的个数 >= m/2后面小于,或者反过来。于是计算f[0/1][0/1][S],分别
表示前i个、后i个,选出的集合是S/不选的集合是S,最小化/或最大化的值,这样可以暴力转移,因为S只有,,,你在想啥,,,mdzz,,
好吧以上纯属我的口胡,考虑,我们优化这个TLE的sb DP,怎么优化呢,考虑贪心转移,发现取的物品集合为S时加上路费是有确定的最小的花费的,于是预处理出来,转移的时候暴力转移

复杂度:O(n*2^m + 3^m) = O(4*10 ^ 7)

总结:可以考虑贪心优化转移

注意情况:无

5.题目名称:4086: [Sdoi2015]travel

通过情况:unAC(!!!)

关键词:暴力

思路:略诡异的一道题,容我想想。

注意情况:

6.题目名称:4008: [HNOI2015]亚瑟王

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

7.题目名称:4006: [JLOI2015]管道连接

通过情况:unAC

关键词:状态压缩dp

思路:考虑,发现p小的可怜,于是我们可以枚举集合划分,即哪些形成一个联通快,考虑到如果只有一个这个频道的话直接不管,那么最多的有用频道数为5,考虑集合划分,发现我们只要dp出集合划分的最小值加起来就能得到答案。考虑直接dp,f[i][S]表示用包含点i的点边连线使集合S联通的最小值,考虑暴力转移,枚举和i相连的边j,枚举S的真子集S1,然后f[i][S] = min ( f[i][S1] + f[j][S - S1] +w(i,j)),边界是f[i][S] (S只含有一个元素) = i和那个元素的最短路,这样我因为可能形成环而无法dp蛋疼了好久,后来发现根本不会形成环,因为枚举的时候不为空,所以每次至少减少1,最后就划归为基本情况了,最好写记忆化搜索,预处理和所有关键点的最短路。

复杂度:O(p*m + m * 3^p) (略可怕)

总结:一定要考虑dp的时候是否会形成环。 假设法dp

注意情况:无

8.题目名称:1042: [HAOI2008]硬币购物

通过情况:AC

关键词:容斥原理 背包dp

思路:将题目要求写成数学形式即方程,我们可以看到,只有4种硬币,4种限制,直接上容斥就好,注意预处理f[i][j]表示方案数,那么f[i][j] = f[i - 1][j - ci] + f[i - 1][j - 2 * ci]等等,注意到这样会TLE,要加速转移,考虑到和f[i][j - ci]形式几乎相同,做差得到f[i][j] = f[i - 1][j] + f[i][j - ci],容斥的时候直接计算就好。

总结:注意dp加速转移(和的形式一般要做差)

注意情况:无

7.题目名称:1068: [SCOI2007]压缩

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

8.题目名称:1072: [SCOI2007]排列perm

通过情况:unAC

关键词:状态压缩dp

思路:怎么感觉可以暴力的呢?s的长度很小,考虑直接状态压缩dp,f[S][j]表示所选集合为S,余数为j的方案数,枚举剩余的作为最高位暴力转移就好,注意到有很多其实是等价的S,于是我们暴力搜索出所有情况然后dp,选择具有代表性的S(等价的最小)进行dp

复杂度:O(2^len*len*d) = O(10^7)

总结:有时候我们需要暴力的做法

注意情况:计数的时候注意不重不漏

9.题目名称:1076: [SCOI2008]奖励关

通过情况:unAC(!!!)

关键词:期望dp

思路:

注意情况:

10.题目名称:1087: [SCOI2005]互不侵犯King

通过情况:unAC

关键词:状压dp

思路:考虑到n很小,设f[i][j][S]表示第i行放了j个国王第i行的放置情况时S的方案数,枚举合法的S1,f[i][j][S] = sum(f[i - 1][j - num(S1)][S1],预处理S1,然后直接dp就好

复杂度:O(n*k*2^n + 2^2n) = O(10^6)

总结:无

注意情况:无

11.题目名称:1097: [POI2007]旅游景点atr

通过情况:unAC

关键词:状态压缩dp

思路:考虑跑K遍spfa暴力建出一张新的k点完全图,包含的是起点终点和k个点,然后可以dp了,题目中给出了一点限制,经典dp转移和定义改一下就好了,记f[u][S]表示当前在u,已走集合为S,且满足拓扑关系的方案,然后转移的时候要合法就好。

复杂度:O(mk+k*2^k) = O(10^7)

总结:注意掌握熟练经典模型

注意情况:无

12.题目名称:1187: [HNOI2007]神奇游乐园

通过情况:unAC(!!!)

关键词:插头dp

思路:

注意情况:

13.题目名称:1195: [HNOI2006]最短母串

通过情况:unAC

关键词:状压dp

思路:考虑,形成的s中,这n个串一定按顺序是相交或者相切的,否则可以删去中间的字符,于是暴力求出最长前后缀匹配,然后就是顺序问题了,建立一个n个点有向图,边的权值是匹配长度,考虑到,ans = 子串总长 - 重合部分,即最大化边权,变成了最经典的dp,直接做就行。

总结:注意透过表象看本质

注意情况:无

14.题目名称:1210: [HNOI2004]邮递员

通过情况:unAC

关键词:插头dp

思路:

注意情况:

15.题目名称:1226: [SDOI2009]学校食堂Dining

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

16.题目名称:1231: [Usaco2008 Nov]mixup2 混乱的奶牛

通过情况:unAC

关键词:状态压缩dp

思路:考虑如果容斥的话不好做,补集转化,求非混乱的队伍,考虑直接dp,
f[i][j][S]的方案数,向后转移就好

复杂度:O(n^2*2^n)

注意情况:无

17.题目名称:1419: Red is good

通过情况:unAC(!!!)

关键词:概率dp

思路:概率+博弈直接等于不会啊

注意情况:

18.题目名称:1494: [NOI2007]生成树计数

通过情况:

关键词:

思路:

注意情况:

19.题目名称:1688: [Usaco2005 Open]Disease Manangement 疾病管理

通过情况:unAC

关键词:状态压缩dp

思路:直接dp,定义f[i][S]表示前i个疾病集合为S的最多个数,暴力转移就好

复杂度:O(2^D*N)

总结:注意多用位运算加速

注意情况:无

20.题目名称:1853: [Scoi2010]幸运数字

通过情况:

关键词:

思路:

注意情况:

21..题目名称:1879: [Sdoi2009]Bill的挑战

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

22.题目名称:1948: [Ceoi2006]Connect

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

23.题目名称:2005: [Noi2010]能量采集

通过情况:AC

关键词:减法原理 dp

思路:其实这道题我们完全可以莫比乌斯反演,但相对而言比较麻烦,考虑我们用减法原理计数,考虑贡献,计算f[i]表示gcd = i的个数,g[i]表示i整除gcd的个数,转移很明显,g[i] = (n/i)*(m/i),
f[i] = g[i] - f[2*i] - f[3*i]等等

复杂度:O(nlogn)(调和级数)

总结:计数的两种方式,熟练掌握

注意情况:无

24.题目名称:2121: 字符串游戏

通过情况:unAC(!!!)

关键词:可行性dp 区间dp 预处理 字符串

思路:

总结:无

注意情况:无

25.题目名称:2024: [SHOI2009] 舞会

通过情况:unAC

关键词:dp 减法原理 高精度

思路:这道题同那道“已经没有什么可害怕的了”是一模一样的题,只不过把恰好变为至少,算出恰好每一种的情况加起来就好啦,有没有容斥原理的做法呢?不知道啊,这题好恶心好像要高精度的样子。

总结:无

注意情况:无

26.题目名称:2064: 分裂

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

27.题目名称:2310: ParkII

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

28.题目名称:2331: [SCOI2011]地板

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

29.题目名称:2393: Cirno的完美算数教室

通过情况:unAC(!!!)(题解)

关键词:容斥原理 复杂度估计

思路:估算不出复杂度来,,,然而正解就是暴力+剪枝

注意情况:

30.题目名称:2440: [中山市选2011]完全平方数

通过情况:unAC

关键词:容斥原理

思路:首先求第k大,二分答案变为统计x以内有多少满足条件,题目中等价于不包含任何质数的大于1的因子,考虑容斥原理,写出数学形式,发现做出贡献的质数是小于根号n的,同时,再考虑贡献,有贡献的当且仅当这些小于根号n,且由若干不同的质数乘积组成,这让我们考虑到了莫比乌斯函数,于是可以愉快的根号n出解了。

总结:看似复杂度较高的容斥原理,写出集合形式,考虑贡献整合,复杂度是可以很低的,不要害怕使用容斥原理。

注意情况:无

31题目名称:2595: [Wc2008]游览计划

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

32.题目名称:2669: [cqoi2012]局部极小值

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

33.题目名称:2734: [HNOI2012]集合选数

通过情况:unAC

关键词:状态压缩dp

思路:很开心想出来这道题,感觉略毒瘤。
考虑,我们发现如果一个数x且x不被2或者3整除,那么x * 2^a*3^b形成一个数的集合,可以估计顶多有O(log^2)个,然而暴力搜索发现只有101个,然后考虑,这些集合相互独立,我们可以分开算,乘起来就好,然后又可以发现,如果将2^a*3^b排序,那么每个集合的答案是连续的前缀,于是只要暴力处理出来整体的,取前缀就可以了,于是考虑如何计算一个集合,容斥原理?不可以,因为限制条件的连接形式是&,我尝试多种集合并和交的变形都失败了,可能是容斥原理无法做这类.题目(思考!!!),再一次的,我暴力搜索了小数据,发现虽然一个数的2/3不是正好在x的前面,但相差不超过17,于是可以状态压缩dp了吧,保存17个的选择方案,f[i][S]直接暴力转移,合法就行,这样这道题就完美解决。

复杂度:O(100 * 2^17) = (10 ^ 7) 略卡啊

总结:1.将相关的内容各自独立处理 2.大胆猜想 + 暴力验证有时候是关键,善于发现小的数量级是关键点

注意情况:

34.题目名称:2839: 集合计数

通过情况:unAC

关键词:集合容斥原理

思路:枚举交集假设为K,其中含有k个元素,设f[K]为交集恰好为K的个数,g[K]表示交集包含K的方案数,很明显g[K] =(sum) f[S](S包含K)反演一下得到f[K] =(sum) (-1)^(k - num[T])g[T],容易知道g[T] = 2^(2^(n - num[T])),再考虑贡献,枚举num,考虑元素为num的个数为C(n - k,t - k)个,然而恰好有k个元素的集合个数是C(n,k),所以ans = C(n,k)sum(i(i >= k)(-1)^(k - i)C(n - k,i - k)2^(2^(n - i))直接计算就好。

总结:无

注意情况:无

35.题目名称:2916: [Poi1997]Monochromatic Triangles

通过情况:unAC

关键词:暴力

思路:考虑补集转化,可以拓展到更多的边数,分情况讨论就好

总结:无

注意情况:无

36.题目名称:3094: [Acm BeiJing2012]Peach Blossom Spring

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

37.题目名称:3125: CITY

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

38.题目名称:3129: [Sdoi2013]方程

通过情况:unAC

关键词:容斥原理 组合数学

思路:考虑到变量的个数很少,可以直接容斥,然后用隔板法求解。

总结:注意问题的正反转换(正难则反(学习))

注意情况:无

39.题目名称:3195: [Jxoi2012]奇怪的道路

通过情况:unAC

关键词:状态压缩dp

思路:考虑到数据是有序的,影响只有K范围内的点,而K又很小,考虑状态压缩,f[i][S]表示到第i个点,i的前面k个点的是否是偶数度,k的前面的点是偶数,暴力转移枚举f[i + 1]的选出集合,保证是合法.,感觉整个晚上都很呆滞啊,我的天啊。

复杂度:O((2^2k)*n) = O(10^7)

总结:想要dp,先找序关系(!!!)

注意情况:无

40.题目名称:3198: [Sdoi2013]spring

通过情况:unAC(!!!)

关键词:

思路:

注意情况:

41.题目名称:3269: 序列染色

通过情况:unAC(!!!)

关键词:dp

思路:f[i]

注意情况:

42.题目名称:3589: 动态树

通过情况:unAC

关键词:dfs序 容斥原理

思路:考虑到子树维护,路径查询,用dfs序维护,又考虑到K最大只有5,求树链的并不好求,然而可以求树链的交,这就是容斥原理了。

复杂度:O(2^K*nlog^2n) = O(3 * 10^8)

总结:看到小范围数据要敏感,对于答案的转化,研究dfs序和树链剖分

注意情况:区分dfs序和树链剖分啊

43.题目名称:3622: 已经没有什么好害怕的了

通过情况:AC
+
关键词:减法原理 dp 松弛思想

思路:略

注意情况:略

44.题目名称:3771: Triple

通过情况:unAC(!!!)(生成函数,多项式,数论)

关键词:

思路:

注意情况:

45.题目名称:3812: 主旋律

通过情况:unAC(!!!)(图论,clj计数)

关键词:

思路:

注意情况:

46.题目名称:3925: [Zjoi2015]地震后的幻想乡

通过情况:unAC(!!!)(概率与期望专题)

关键词:据说是一道神题,

思路:

注意情况:

计数类问题专题

标签:

原文地址:http://blog.csdn.net/qq_20669971/article/details/51244931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!