
动态规划-计数
Endless_Way
这个作者很懒,什么都没留下…
展开
-
BZOJ 4562 [Haoi2016]食物链
DAG+DPf[i]表示方案数,于是可以从i的所有儿子转移来。方便起见我加的是反边。#include<cstdio>#include<queue>#define N 100005#define M 200005using namespace std;queue<int> q;int n, m;struct edge{int next,to;}e[M];int last[N], f[N原创 2016-09-14 10:17:24 · 271 阅读 · 0 评论 -
BZOJ 4455 & UOJ 185 [ZJOI2016]小星星
容斥原理+树形DP首先有一个暴力的想法,f[i][j][sta]表示树中i与图中k对应,i的子树与sta(状压)对应,然后大力转移。这需要枚举子集,复杂度约O(n2∗3n)O(n^2*3^n)考虑枚举状态sta表示图中可用点范围,记f[i][j]表示i和j对应,但对应可以重复,即可以不一一对应。最终答案就是与全集一一对应的方案数。考虑容斥,记SnS_n表示不使用图中节点n的方案,显然这些都是不合理的原创 2016-09-10 11:47:53 · 445 阅读 · 0 评论 -
BZOJ 4011 [HNOI2015]落忆枫音
拓扑图DP对于拓扑图,deg[i]表示i的入度,根为1,答案就是 ∏ni=2deg[i]\prod_{i=2}^{n} deg[i]即除根节点外,每个点都选择一条入边,由于图是DAG,因此一定会形成一个树形图(听说这是朱刘算法的推论?)考虑加完边之后有环怎么办?只要在答案里减去环的贡献即可。如何求环的贡献?当环的边全部被选时,方案数肯定是所有非环上点(除了根)的入度之积。脑补即可证明。附大爷题解:h原创 2016-09-28 14:24:52 · 321 阅读 · 0 评论 -
BZOJ 1025 [SCOI2009]游戏
将各个数字与它的对应数字连边,就可以得到若干个环。排数就是这些环的最小公倍数,且节点数为n。于是题意就是问和为n的若干个数的最小公倍数(LCM)有多少种。记f[i][j]表示前i个质数的和为j时的LCM方案数。f[i][j]=f[i-1][j]+∑q[i]k≤jk=1f[i−1][j−q[i]k]\sum_{k=1}^{q[i]^k≤j} f[i-1][j-q[i]^k] #include<cstd原创 2016-08-01 13:33:32 · 326 阅读 · 0 评论 -
BZOJ 3622 已经没有什么好害怕的了
DP+容斥然而这题还是令我很害怕。 最值问题的DP一般考虑排序之后从小到大或从大到小,一个一个地考虑。对于这题,对A,B排序,记next[i]=j,表示最大的j满足B[j] < A[i],不难想到方程f[i][j]表示做到A的第i个,其中已经有j对满足A>B,然后转移 f[i][j] = f[i-1][j] + f[i-1][j-1] * (next[i] - j + 1)但是这显然是错的,因为原创 2017-01-18 20:51:01 · 392 阅读 · 0 评论 -
BZOJ 4559 [JLoi2016]成绩比较
DP+组合计数不难想到记f[i][j]表示统计到第i门课,此时j个人被碾压的方案数。 f[i][j] = f[i-1][k] * C[k][j] * C[n-k-1][n-rank[i]-j] * P[i] (k >= j) 意义就是从前面的k个人里面选出j个人继续碾压,再选出一些人来排在自己的排名后面,再乘上分配给n个人1~U[i]的分数的合法方案数P[i]。我们发现 P[i]=∑U[i]j=原创 2017-02-22 15:09:05 · 916 阅读 · 0 评论 -
BZOJ 3162 独钓寒江雪
树哈希+树形DP+组合计数VFK题解里用的是直径的中心,然而我用的是重心,不过基本没区别。所有独立集计数记f[i][0/1]表示i取或不取,子树内独立集个数。要求本质不同,那我们希望拿一个点r出来当根,尽量让以r为根的有根树形态唯一,即不存在树内一点u,使得u当根和r当根时结构一样。重心是一个不错的选择,因为一棵树重心至多两个。对于重心有两个的情况大力分类讨论即可,前面的做法和重心唯一的做法一样。考原创 2017-02-25 14:02:29 · 428 阅读 · 0 评论 -
51Nod 1608 管道安装
一道观察性质好题- -。一个朴素的做法是插头DP,然而这题数据范围太大,考虑题目性质。 来个例子”L12”,其中12表示还没有填,L表示这个位置放了一个L形的管道。仔细观察可知此时1必有左插头,2不能有左插头因此必有右插头。类似地我们可以完全把一整行的左右插头确定下来。确定完之后我们可以保证这一行不会在左右插头的位置发生泄漏。同理做一下上下。最后答案就是2^(没确定的行和列)#include<cst原创 2017-04-02 00:30:03 · 386 阅读 · 0 评论 -
BZOJ 5109 [CodePlus 2017]大吉大利,晚上吃鸡!
最短路+bitset+DP个人觉得这题的思路非常高妙。首先肯定是要建出最短路DAG,这个图上任意一条路径都对应一条原图的最短路。如果一个点a在S到T的必经之路上,那就会有S到a的方案数 * a到T的方案数 = S到T的方案数这个东西显然是充要的,这是一个巧妙的转化。套用这个想法,这题要求选出两个点,那就只需S到a的方案数 * a到T的方案数 + S到b的方案数 * b到T的...原创 2018-08-19 00:22:49 · 344 阅读 · 0 评论