DP
文章平均质量分 57
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[DP 倍增] BZOJ 4870 [Shoi2017]组合数问题
就是求 nknk 个物品里面取 模kk余rr 个物品的方案数 这个直接dp fi,jf_{i,j}表示前 ii 个 余 jj 个的方案数 矩阵快速幂是O(k3logn)O(k^3\log n) 实际上这个转移满足结合律 直接在快速幂的时候转移就好了 另一种理解是 这个矩阵是循环矩阵 矩阵的记录和乘法都只要处理第一行就好了 复杂度是O(k2logn)O(k^2\log n) 代码比想象中原创 2017-05-02 21:16:57 · 781 阅读 · 0 评论 -
[树形DP] BZOJ 4824 [Cqoi2017]老C的键盘
首先这是棵完全二叉树 直接fu,if_{u,i}表示u在子树u中排名i的方案数 然后合并就是两个排列合并咯 组合数乘一下 大于小于都差不多#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char b原创 2017-04-21 08:12:24 · 864 阅读 · 0 评论 -
[几何 LIS] BZOJ 3663 Crazy Rabbit & 4660 Crazy Rabbit & 4206 最大团
膜一发题解 问题转化为直线上有一些区间,选出尽量多的区间使得它们两两之间”相交但不包含” 考虑最终方案中选出来的所有区间中左端点最小的一个,因为区间两两之间有公共部分所以这个区间内必须包含其他所有区间的左端点.那么我们枚举这个左端点最小的区间,只把其他区间中左端点在这个区间内的区间拿出来,按左端点排序后对右端点跑LIS,就可以保证选出来的区间有公共部分而且不包含.复杂度为O(n2logn)原创 2017-04-21 08:24:04 · 587 阅读 · 0 评论 -
[树形DP FWT] HDU 5909 Tree Cutting
给一个带点权的树 文有多少个连通子图的异或和为0~m-1 没什么好说吧 水题#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; re原创 2017-04-21 08:46:34 · 622 阅读 · 0 评论 -
[DP 倍增] BZOJ 4818 [Sdoi2017]序列计数
怎么跟这个题这么像啊 容斥一下 用没有限制的 减去 一个质数都不选的 复杂度O(p2logn)O(p^2\log n)#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef lo原创 2017-05-03 21:28:42 · 475 阅读 · 0 评论 -
[数位DP] Codeforces 809C Round #415 (Div. 1) C. Find a car
这个东西就是(x−1) xor (y−1)+1(x-1) \ \text {xor} \ (y-1)+1 然后转化为 ∑i∑j[i xor j≤k]\sum_i\sum_j [i \ \text {xor} \ j \leq k]和∑i∑j[i xor j≤k]∗(i xor j)\sum_i\sum_j [i \ \text {xor} \ j \leq k]*(i \ \text {xor}原创 2017-05-23 21:29:10 · 1233 阅读 · 0 评论 -
[DP 平衡树] Codeforces 809D Round #415 (Div. 1) D. Hitchhiking in the Baltic States
考虑求lis的过程 fif_i表示长度为ii的递增子序列最末尾一项的最小值 这个东西是单调递增的 每次在序列后加入一个数 就更新下相应的一个位置 现在变成加入的数可以是一个区间内 那么我们发现会对一段产生影响 平衡树维护下就好了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline c原创 2017-05-23 21:32:59 · 723 阅读 · 0 评论 -
[树形DP] BZOJ 4033 [HAOI2015]树上染色
关键是状态设计 fu,if_{u,i} 不止表示u子树内i个黑点 子树内同色点两两之间的答案 其实应该是u子树内i个黑点 子树内同色点两两之间的答案以及子树内点和子树外点的答案 因为黑白点的个数是确定的 所以很好转移#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long原创 2017-04-22 20:25:19 · 505 阅读 · 0 评论 -
[矩阵快速幂 DP] BZOJ 4037 [HAOI2015]数字串拆分 & BZOJ 2323 [ZJOI2011]细胞
题解 把矩阵当做DP的值来转移 因为矩阵乘法满足结合律 分配律 然后大力DP就好了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;const i原创 2017-04-22 20:29:16 · 406 阅读 · 0 评论 -
[DP 容斥原理] HDU 5519 Kykneion asma
扔下题解就跑 其实我也没全搞懂 先挖个坑#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int P=1e9+7;const int N=20005;ll fac[N],inv[N];int cnt[1原创 2017-04-22 20:55:23 · 676 阅读 · 0 评论 -
[状压DP 边双连通分量] BZOJ 3590 [Snoi2013]Quare
陕西出出来的好题 题解注意一个边双可以拆成一条链和一个小边双 然后就可以了 f[i]:集合状态为i.且使在i中的点双联通的最小权值. h[i][j][0]:一个端点是j.另一个端点在点集i中的边的最小权值. h[i][j][1]:一个端点是j.另一个端点在点集i中的边的次小权值. g[i][j][k].集合状态为i.且使在i中的点构成一条链.两端点分别是j和k的最小权值.#原创 2017-04-22 20:57:56 · 790 阅读 · 0 评论 -
[环套树 树形DP 期望] BZOJ 2878 [Noi2012]迷失游乐园
瞎DP一下就好了 不过是搞得我蛮昏的 我懒 找一篇题解就当做我写过题解了#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf原创 2017-04-22 21:00:11 · 587 阅读 · 0 评论 -
[背包DP || 多项式] 51Nod 1597 有限背包计数问题
这是个多重背包 直接做肯定接受不了时间复杂度 我们看当体积大于 n√\sqrt n 时 是用不完的 是个完全背包 但还是接受不了复杂度 再观察 体积大的总共只可能取n√\sqrt n个 令fi,jf_{i,j}表示拿了 ii 个 总体积为 jj 的方案数 这样转移 每次全部加1 或者新加入一个⌊n√⌋+1\lfloor \sqrt n \rfloor+1体积小的嘛 总共根号种 前缀和转一下原创 2017-04-22 21:08:39 · 718 阅读 · 0 评论 -
[树形DP] BZOJ 4835 遗忘之树
一个不难的题吧 最后半小时才想到 树形DP咯 fuf_u 表示点分树上子树u的方案数 之后呢 转移关键就是要乘上这级重心向下一级子树中的那个点连边 因为重心会有两个 而这里规定是编号小的优先 如果下一级子树中没有第二个重心 那么就连哪个都行 否则 只能连比uu标号小的 我可能学傻 写了个主席树 能不能不要主席树我还不清楚#include<cstdio>#include<cstdlib>原创 2017-04-22 20:53:20 · 720 阅读 · 0 评论 -
[DP] BZOJ 4897 [Thu Summer Camp2016]成绩单
骗一波访问 出门右转 #include<cstdio>#include<cstdlib> #include<algorithm> #include<cstring> using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=b原创 2017-05-19 21:04:46 · 759 阅读 · 0 评论 -
[DP套DP] BZOJ 3864 Hero meet devil
我们令fi,jf_{i,j}表示TiT_i和SjS_j的LCS 然后我们发现 fi,j−fi,j−1∈[0,1]f_{i,j}-f_{i,j-1} \in [0,1] 这个东西可以状压 预处理所有转移 然后DP#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(原创 2017-05-31 20:20:15 · 433 阅读 · 0 评论 -
[DP套DP] SRM 591 div1 StringPath
记录f(i,j)是不是A/B的前缀,需要保留前m个dp值 其实就是轮廓线 复杂度O(nm∗4m)O(nm*4^{m})// BEGIN CUT HERE #include<conio.h>#include<sstream>// END CUT HERE #include<cstdio>#include<cstdlib>#include<cstring>#include<cmat原创 2017-05-31 20:22:52 · 397 阅读 · 0 评论 -
[DP套DP] UOJ #141 【UER #4】量子态的棋盘
预先DP一遍则每个格子最多留一个球,然后对轮廓线的状态装压 如果定义一个点的状态数不超过SS 那么据题解说SS大概是5×1055\times 10^5 复杂度O(nmS)O(nmS) 接下来是卡常时刻 我先是把轮廓线上的球数转化成一个80进制数 然后和当前已经入袋的球数hash在一起 hashmap里面存一下 成功rnk1 开心#include<cstdio>#include<cstdl原创 2017-05-31 20:26:48 · 1017 阅读 · 0 评论 -
[杂题 背包DP] Codeforces 793E Tinkoff Challenge - Elimination Round E. Problem of offices
因为都经过根 那么只要考虑根的那么些子树就好了 然后要求 a-b之间是n/2个点 c-d之间是n/2个点 四个点的顺序是 a-c-b-d 或 a-d-b-c 那么背包做一下就好了 If solution of both knapsacks exists, then answer is «YES», otherwise «NO». We can always order items fro原创 2017-05-28 10:45:45 · 651 阅读 · 0 评论 -
[数位DP AC自动机] Codeforces 434C Round #248 (Div. 1) C. Tachibana Kanade's Tofu
这个题无话可说 fi,j,k,tf_{i,j,k,t}表示第 ii 位,AC自动机上走到 jj ,当前得分为 kk ,是否小于上界 tt , 复杂度看着很高,其实跑不满?#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x))using原创 2017-06-17 20:20:37 · 614 阅读 · 0 评论 -
[Lucas定理 数位DP 容斥原理] 2015 计蒜之道 复赛 360的产品试用体验
直接上官网题解吧:http://blog.jisuanke.com/?p=146题意即求其中且因为 47 是质数,如果把ai, li, ri, xi 写作 47 进制数因为 47 是质数,根据Lucas定理 ,题目转换为求的值,同时满足:– 字典序不小于 不大于 – x1 + x2 + x3 ≤ n.原创 2016-11-14 12:45:23 · 1051 阅读 · 0 评论 -
[区间DP] Codeforces 392E Round #230 (Div. 1) E. Deleting Substrings
好水的E题 f[i][j]表示删完[i,j]区间的最大收益 g[i][j] 表示把[i,j]删成a[i], a[i]+1, a[i]+2 …a[j]的最大收益 h[i][j]类似g[i][j],递减 f[i][j] <- g[i][k]+h[k][j]+v[2*a[k]-a[i]-a[j]+1]#include<cstdio>#include<cstdlib>#i原创 2017-06-29 18:52:11 · 574 阅读 · 0 评论 -
[树形依赖多重背包] BZOJ 4910 [Sdoi2017] 苹果树
首先解决依赖背包 如果是0/1背包,按照后序遍历dp,根据选或不选决策 现在是多重背包,那么这个点只留一个,剩下的变成一个新点挂上去,这样仍然满足依赖关系, 转移的时候多重背包用单调对列优化可以发现如果除了最长的一条链,剩余最多KK个 因为权值为正 那么最长链必然连到叶子,剩余必然取KK个(除非不足KK个) 那么我们枚举叶子 然后两边总共取出KK个,枚举两边分别选几个 两边需要两次儿子顺原创 2017-06-09 14:36:53 · 1464 阅读 · 0 评论 -
[数位DP 莫比乌斯反演] 2017 计蒜之道 复赛 A. 阿里云秘钥池
大概可以推出来转移是 fx=∑d|xμ(d)∑⌊P−1d⌋i=1gid=∑d|xμ(d)G(d)f_x=\sum_{d|x}\mu(d)\sum_{i=1}^{\lfloor {P-1\over d}\rfloor} g_{id}=\sum_{d|x}\mu(d)G(d) 转移是O(nlnn)O(n\ln n)的 然后就直接数位dp咯#include<cstdio>#include<cst原创 2017-06-11 08:01:22 · 700 阅读 · 1 评论 -
[数位DP Lucas定理] 2017 计蒜之道 复赛 E. 商汤智能机器人
阿爷教导我 ∑∞i=0(Ai)∗(A+B−iA),A=x+y2,B=x−y2\sum _{i=0}^\infty \dbinom{A}{i}*\dbinom{A+B-i}{A},A={x+y\over 2},B={x-y\over2}然后就是数位dp+lucas定理的套路了 注意有减法要处理退位 一开始写的时候考虑的有点问题 调了很久很久 这个可以从低到高 也可以从高到低 因为意识模糊就原创 2017-06-11 08:13:52 · 1650 阅读 · 3 评论 -
[概率论 DP] BZOJ 3652 大新闻
边看题解边凑公式#include#include#includeusing namespace std;typedef long long ll;ll n,len;double p;double a[105];inline double part2(){ n++; double ans=0; for (int i=len-1;i>=0;i--) { doubl原创 2016-03-13 19:12:58 · 832 阅读 · 0 评论 -
[DP优化] POJ 1160 Post Office
另解:四边形不等式优化考虑这个最优解关于段数是凸的,那么我们不限制段数,而是给每段一个额外的权值,随着这个权值单调变化,最优解的段数也会单调变化,二分出最优解是 mm 段就好了 这个的本质是二分出那个凸函数在 mm 上的斜率然后这个dp是满足决策单调性的 复杂度O(nlog2n)O(n\log ^2n)#include<cstdio>#include<cstdlib>#include<algo原创 2017-07-06 15:53:43 · 529 阅读 · 0 评论 -
[DP 分块] UOJ #300. 【CTSC2017】吉夫特
DP的转移是一个子集和的形式 直接做是3183^{18} 按照高9位 低9位分块可以做到29×39=692^9\times 3^9=6^9#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;#define read(x) scanf("%d",&(x))const int N=1<<18;cons原创 2017-07-23 13:15:37 · 713 阅读 · 0 评论 -
[DP] UOJ #311. 【UNR #2】积劳成疾
fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中最大值在 jj ,最大值是 kk,有点复杂?#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typ原创 2017-07-23 14:10:32 · 627 阅读 · 0 评论 -
[DP] Codeforces Gym 101002 H. Jewel Thief
它是个背包 我们就做背包 因为体积范围很小 我们按体积分类 然后因为当我们决策某个体积拿多少个时肯定拿价值大的前几个 我们按体积划分阶段DP 然后发现转移都是在差为体积整数倍之间 按照容量对体积取模分组 发现组内部转移满足神奇的决策单调性?! 然后就大力分治一发 O(KClogC)O(KC \log C)正解肯定不是这个 正解肯定不是这个 正解肯定不是这个 正解真的不是这个 应该O(KC原创 2017-04-07 19:54:29 · 717 阅读 · 0 评论