关闭
当前搜索:

[DP] UOJ #311. 【UNR #2】积劳成疾

fi,jf_{i,j}表示长为 ii 的区间 最大值是jj 的答案 转移就枚举最左边的最大值在区间的位置 前缀和优化下就好了好像也可以fi,j,kf_{i,j,k}表示前 ii 个,末尾 KK 个中最大值在 jj ,最大值是 kk,有点复杂?#include #include #include using namespace std; typ...
阅读(203) 评论(0)

[DP 分块] UOJ #300. 【CTSC2017】吉夫特

DP的转移是一个子集和的形式 直接做是3183^{18} 按照高9位 低9位分块可以做到29×39=692^9\times 3^9=6^9#include #include #include using namespace std;#define read(x) scanf("%d",&(x))const int N=1<<18; cons...
阅读(189) 评论(0)

[DP优化] POJ 1160 Post Office

另解:四边形不等式优化考虑这个最优解关于段数是凸的,那么我们不限制段数,而是给每段一个额外的权值,随着这个权值单调变化,最优解的段数也会单调变化,二分出最优解是 mm 段就好了 这个的本质是二分出那个凸函数在 mm 上的斜率然后这个dp是满足决策单调性的 复杂度O(nlog2n)O(n\log ^2n)#include #include #include<algo...
阅读(160) 评论(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 #include #i...
阅读(240) 评论(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 #include #include #include #define cl(x) memset(x,0,sizeof(x)) using...
阅读(236) 评论(0)

[数位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定理的套路了 注意有减法要处理退位 一开始写的时候考虑的有点问题 调了很久很久 这个可以从低到高 也可以从高到低 因为意识模糊就...
阅读(537) 评论(3)

[数位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 #include<cst...
阅读(321) 评论(1)

[树形依赖多重背包] BZOJ 4910 [Sdoi2017] 苹果树

首先解决依赖背包 如果是0/1背包,按照后序遍历dp,根据选或不选决策 现在是多重背包,那么这个点只留一个,剩下的变成一个新点挂上去,这样仍然满足依赖关系, 转移的时候多重背包用单调对列优化可以发现如果除了最长的一条链,剩余最多KK个 因为权值为正 那么最长链必然连到叶子,剩余必然取KK个(除非不足KK个) 那么我们枚举叶子 然后两边总共取出KK个,枚举两边分别选几个 两边需要两次儿子顺...
阅读(393) 评论(0)

[DP套DP] UOJ #141 【UER #4】量子态的棋盘

预先DP一遍则每个格子最多留一个球,然后对轮廓线的状态装压 如果定义一个点的状态数不超过SS 那么据题解说SS大概是5×1055\times 10^5 复杂度O(nmS)O(nmS) 接下来是卡常时刻 我先是把轮廓线上的球数转化成一个80进制数 然后和当前已经入袋的球数hash在一起 hashmap里面存一下 成功rnk1 开心#include #include<cstdl...
阅读(179) 评论(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 #include // END CUT HERE #include #include #include #include<cmat...
阅读(108) 评论(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 #include #include #include #define cl(x) memset(...
阅读(124) 评论(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...
阅读(230) 评论(0)

[DP 平衡树] Codeforces 809D Round #415 (Div. 1) D. Hitchhiking in the Baltic States

考虑求lis的过程 fif_i表示长度为ii的递增子序列最末尾一项的最小值 这个东西是单调递增的 每次在序列后加入一个数 就更新下相应的一个位置 现在变成加入的数可以是一个区间内 那么我们发现会对一段产生影响 平衡树维护下就好了#include #include #include using namespace std;inline c...
阅读(366) 评论(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}...
阅读(778) 评论(0)

[DP] BZOJ 4897 [Thu Summer Camp2016]成绩单

骗一波访问 出门右转 #include #include #include #include using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=b...
阅读(381) 评论(0)

[DP 倍增] BZOJ 4818 [Sdoi2017]序列计数

怎么跟这个题这么像啊 容斥一下 用没有限制的 减去 一个质数都不选的 复杂度O(p2logn)O(p^2\log n)#include #include #include #include #define cl(x) memset(x,0,sizeof(x)) using namespace std; typedef lo...
阅读(184) 评论(0)

[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) 代码比想象中...
阅读(322) 评论(0)

[背包DP || 多项式] 51Nod 1597 有限背包计数问题

这是个多重背包 直接做肯定接受不了时间复杂度 我们看当体积大于 n√\sqrt n 时 是用不完的 是个完全背包 但还是接受不了复杂度 再观察 体积大的总共只可能取n√\sqrt n个 令fi,jf_{i,j}表示拿了 ii 个 总体积为 jj 的方案数 这样转移 每次全部加1 或者新加入一个⌊n√⌋+1\lfloor \sqrt n \rfloor+1体积小的嘛 总共根号种 前缀和转一下...
阅读(293) 评论(0)

[环套树 树形DP 期望] BZOJ 2878 [Noi2012]迷失游乐园

瞎DP一下就好了 不过是搞得我蛮昏的 我懒 找一篇题解就当做我写过题解了#include #include #include using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf...
阅读(283) 评论(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的最小权值. #...
阅读(331) 评论(0)
150条 共8页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:307110次
    • 积分:12382
    • 等级:
    • 排名:第1310名
    • 原创:969篇
    • 转载:3篇
    • 译文:0篇
    • 评论:54条
    最新评论