DP
文章平均质量分 57
里阿奴摩西
这个作者很懒,什么都没留下…
展开
-
[分层图 DP] HihoCoder #1147 时空阵
题解:http://blog.csdn.net/nlj1999/article/details/50413427?locationNum=4由于K于是乎边只能和上一层以及本层的节点相连。注意最后一层必有n 然后剩下的弄成一团 无所谓分不分层 放在n那一层的后面 #include#include#includeusing namespace std;原创 2016-12-19 20:21:07 · 562 阅读 · 0 评论 -
[中国邮路问题 欧拉回路 最短路 一般图匹配||状压DP] FZU 1009 Jogging Trails
论文:仇荣琦《欧拉回路性质与应用探究》本来以为完全图匹配有什么高深的算法 结果去看参考资料里的论文就是带花树 汗 这道题n小 状压每个点的奇偶性#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=b原创 2016-12-06 21:07:48 · 998 阅读 · 0 评论 -
[朱刘算法推论 拓扑序DP] BZOJ4011 [HNOI2015]落忆枫音
传送门:http://blog.csdn.net/popoqqq/article/details/45194103很文艺的题目朱刘算法的推论 如果除根节点外每个点都选择一条入边,由于没有环,因此一定会形成一个树形图 去掉多余情况的过程是个拓扑序DP#include#include#include#define V G[p].v#define Mod 1000原创 2016-03-15 10:39:30 · 647 阅读 · 0 评论 -
[DP] BZOJ 3111 [Zjoi2013]蚂蚁寻路
这个可以发现形状肯定是 下面平 上面一高一低的 总共2k+1那么乱DP一下就好了#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=bu原创 2017-01-07 10:00:09 · 446 阅读 · 0 评论 -
[期望 DP || 高斯消元 KMP] BZOJ 3213 [Zjoi2013]抛硬币
这个其实也不复杂 先kmp 可以发现 每个点的状态会从转移到 i+1 和 next[i] 不妨设为f然后列出方程 直接就可以上高斯消元 大概80?这个东西其实可以DPE(i+1)=(E(i)-1-p[t^1]*E(f))/p[t]E(i)=k[i]*E(0)-b[i]k[i+1]*E(i+1)-b[i+1]=(k[i]*E(0)-b[i]-1-p[t^1]*(k[f]*原创 2017-01-19 06:55:33 · 1187 阅读 · 0 评论 -
[树形DP] HihoCoder #1471 Challenge 27 拥堵的城市
大概就是f[i][j]f[i][j]表示ii子树中还有jj条链伸出来 子树合并进来转移一下 转移的时候枚举kk对边要配对 也就是不伸出去了 比赛的时候复杂度分析错 搞得自己一开始否定了这个转移 最后几十秒钟查出错还把代码给交错了 真的是整场比赛智商无下限 感谢整场带我的rxd大爷#include<cstdio>#include<cstdlib>#include<algorithm>原创 2017-02-19 21:37:13 · 495 阅读 · 0 评论 -
[期望 状压DP 子集DP 多项式] BZOJ 3925 [Zjoi2015]地震后的幻想乡
Po姐说的肯定比我清楚多http://blog.csdn.net/popoqqq/article/details/44858691#include#include#include#includeusing namespace std;typedef long long ll;typedef __float128 ld;inline char nc(){原创 2017-01-11 15:02:44 · 554 阅读 · 0 评论 -
[子集DP] BZOJ 2560 串珠子
子集DP的裸题采用补集转化的思想 减去不连通的 我们可以 任选一个点 枚举这个点的联通块 也就是当前状态的子集子集枚举 http://www.cnblogs.com/jffifa/archive/2012/01/16/2323999.htmlfor (int x = S; x; x = (x-1)&S)称S中的1所在位为有效位,0所在位为无效位,则x中的无效位必原创 2017-01-20 20:48:19 · 984 阅读 · 0 评论 -
[容斥 状压DP 树形DP] BZOJ 4455 [Zjoi2016]小星星 & UOJ #185 【ZJOI2016】小星星
杜老师说的哦UOJ上需要卡常#include#include#include#include#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p原创 2017-01-20 20:52:44 · 604 阅读 · 0 评论 -
[DP 四边形不等式优化] POJ 1160 Post Office
蒟蒻不会四边形不等式形似fi,j=min{fi−1,k+wk,j}f_{i,j}=min \{ f_{i-1,k}+w_{k,j} \}的方程 且满足四边形不等式和区间包含单调性 就可以用四边形不等式优化#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const原创 2017-02-14 10:24:28 · 482 阅读 · 0 评论 -
[DP 四边形不等式优化] 51Nod 1022 石子归并 V2
蒟蒻不会四边形不等式形如 fi,j=min{fi,k+fk+1,j+wi,j} f_{i,j}=min \{ f_{i,k}+f_{k+1,j}+w_{i,j}\}的方程 且满足四边形不等式和区间包含单调性 就可以用四边形不等式优化#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using names原创 2017-02-14 10:26:56 · 315 阅读 · 0 评论 -
[二分 后缀自动机 单调队列优化DP] BZOJ 2806 [Ctsc2012]Cheat
先在后缀自动机上匹配 求出mat[i]表示作文的每个位置i为结尾最长能匹配多长二分L 设f[i]表示前i个字符熟悉的部分最多有多长 那么f[i]=max(f[i-1],f[j]+i-j) 其中j要满足i-j>=L&&i-j+1<=mat[i] 得i-mat[i]<=j<=i-L 而mat[i]+1>=mat[i+1] 得i+1-mat[i+1]>=i-mat[i] 所以i-mat[i]原创 2017-01-28 21:29:18 · 369 阅读 · 0 评论 -
[DP] BZOJ 1974 [Sdoi2010]auction 代码拍卖会 & 51Nod 1261 上升数
tls的题解 关键在于 对于一个上升数 比如 1123445 我们习惯性的把他纵向切割 1 1 2 3 4 4 5 但是只要我们转变一下 横向切割 变成 1111111+11111+1111+111+1 就会发现一些很好的性质 首先 最多被切割成9段 然后这些形似1111⋯1111\cdots的数取模肯定是有循环节的 把余数相同的合并成一组 做一个分组背包 记得因为10k−1910^{k原创 2017-02-24 01:22:15 · 527 阅读 · 0 评论 -
[子集DP 斯坦纳树 模板题] HDU 4085 Peach Blossom Spring & BZOJ 4006 [JLOI2015]管道连接
斯坦纳树的模板题 状态f[s][j]f[s][j]表示 状态s表示的点集 在 j 连通 的代价 层间转移很轻易 层内转移 用最短路算法 平均情况下SPFA更好些 这两道题都可以生成森林而不是树 那么加一个check检验下#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x)原创 2017-02-15 21:48:17 · 515 阅读 · 0 评论 -
[DP || 贪心 链表] BZOJ 4576 [Usaco2016 Open]262144 & BZOJ 4580 [Usaco2016 Open]248
有意思的一道题官网上的做法是f[i][j]表示从j出发能够合并出i的末端 不存在则为0然后就可以转移了这有什么好呢 短#include#include#includeusing namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=原创 2016-10-23 12:14:26 · 439 阅读 · 0 评论 -
[DP] BZOJ 1939 [Croatian2010] Zuma
理性愉悦终于完结了 接下来不能再颓了 先把做的题补一下题意 就是祖玛~ 还是直接上官方题解吧 对于这种状态设计玄妙的DP真是一窍不通啊 #include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const int N=105;int f[N][N][5];int n,原创 2017-03-18 20:07:26 · 763 阅读 · 3 评论 -
[DP] BZOJ 3810 [Coci2015]Stanovi
首先有个结论就是 如果每个矩形都要挨着边界 那么必然可以把整块切成两部分 然后无脑DP就好了 就是卡卡常 后四维分别表示四边是不是邻着边界#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;typedef long long ll;const int N=30原创 2017-03-18 20:15:28 · 529 阅读 · 0 评论 -
[DP] Tsin A1315 积木
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1原创 2017-03-18 20:30:54 · 346 阅读 · 0 评论 -
[DP] Codeforces 687C #360 (Div. 1) C. The Values You Can Make
其实是个水题 自己竟然想半天 Let dpi, j, kdp_{i, j, k} be true if and only if there exists a subset of the first i coins with sum j, that has a subset with sum k. So dpi, j, kdp_{i, j, k} is equal to dpi − 1, j原创 2017-03-18 20:34:36 · 239 阅读 · 0 评论 -
[DP 思路题] BZOJ 2708 [Violet 1]木偶
蛮妙的题 满满的TC味考虑一种木偶与绳索配对的方法: AwD orz 木偶11与绳索k+1k+1配对,木偶22与绳索k+2k+2配对……木偶n−kn−k与绳索nn配对。 当木偶n−k+1n−k+1无法与绳索kk配对时,这样的配对方法能扔掉kk个木偶。然后就可以DP了#include<cstdio>#include<cstdlib>#include<algorithm>#define原创 2017-03-09 11:46:21 · 471 阅读 · 0 评论 -
[无向图简单环计数 状压DP] Codeforces 11D Beta Round #11 D. A Simple Task
这是NP的 算是一道模板题 学习下#include<cstdio>#include<cstdlib>#include<algorithm>#define read(x) scanf("%d",&(x))using namespace std;typedef long long ll;const int N=20;int n,m;int w[N][N];ll f[1<<N][N],an原创 2017-03-06 20:41:13 · 689 阅读 · 0 评论 -
[暴力 树形DP] Codeforces Gym 100553H NEERC14 H. Hidden Maze
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,1原创 2017-03-06 20:47:05 · 479 阅读 · 0 评论 -
[数位DP] BZOJ 2713 [Violet 2]愚蠢的副官 & BZOJ 1183 [Croatian2008]Umnozak
官方题解 The first observation we can make is that, for all positive integers xx, the digit-product p(x)p(x) is always less than or equal to xx. From x∗p(x)≤B≤1018x*p(x) ≤ B ≤ 10^{18} we can deduce that原创 2017-03-10 16:08:08 · 696 阅读 · 0 评论 -
[容斥原理 DP] BZOJ 4767 两双手
首先一个向量可以被两个向量唯一表示 然后就转化为有障碍点的网格图路径计数 这应该是个经典的容斥模型 果然是NOIP模拟赛啊 如果不考虑障碍 那么答案是path(s,t)=Cmn+mpath(s,t)=C_{n+m}^m 然后我们考虑容斥 枚举路径上碰到的第一个障碍点vv Ans=Cmn+m−fv∗path(v,t)Ans=C_{n+m}^m-f_v*path(v,t) 其中fvf_v表示从原创 2017-03-07 20:25:15 · 1105 阅读 · 0 评论 -
[区间DP 思路题] BZOJ 4350 括号序列再战猪猪侠
蒟蒻不会做 这里讲的蛮详细的#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define read(x) scanf("%d",&(x))#define cl(x) memset(x,0,sizeof(x))using namespace std;typedef long long ll;co原创 2017-03-11 20:00:56 · 598 阅读 · 0 评论 -
[树形DP 暴力] BZOJ 3696 化合物
就是个暴力?! 复杂度 不会分析 n+e的题解好像进不去啊#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1=原创 2017-03-11 20:03:07 · 426 阅读 · 0 评论 -
[XOR最小生成树 期望 DP] BZOJ 4770 图样
myh的题解 orzz 实现起来有点细节要处理 可能是我太弱?我就这么写了个记忆化搜索 结果极限数据要3.5s 然后我就活生生的被卡常了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define read(x) scanf("%d",&(x))using namespace std;type原创 2017-03-12 11:35:30 · 1312 阅读 · 3 评论 -
[DP] BZOJ 4574 [Zjoi2016]线段树
实在是不会食用 题解戳这里#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;#define read(x) scanf("%d",&(x))const int N=405;const int P=1e9+7;int n,q,a[N],rnk[N],b[N原创 2017-03-21 23:41:57 · 569 阅读 · 0 评论 -
[贪心 模拟 + 二分答案 DP] BZOJ 1181 [CROATIAN2009]IZBROI选举
听说这是种有理有据的席位分配方法? 求最大值 可以直接把剩下的票全给他 模拟一发就好了 求最小值 就需要二分答案加DP检验了 我们用fi,jf_{i,j}表示不包括当前党派的前ii个党派总共占据jj个席位最少还要多少选票 只要检验 f20,m−mid≤V−totf_{20,m-mid} \leq V-tot 就行了 2020是因为最多有2020个党派有席位 因为5%5\%的限制#inclu原创 2017-03-21 23:47:44 · 575 阅读 · 0 评论 -
[DP] Codeforces 150D #107 (Div. 1) D. Mission Impassable
题目大意 删长度为xx的回文串 会有得分axa_x 删完拼在一起 问最大得分 关键是设计状态 fi,j,kf_{i,j,k} 表示把[i,j][i,j]这段 删除掉还剩长为kk的回文串的最大代价 顺便gi,jg_{i,j}表示删完的代价 然后转移就不难看懂了#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstr原创 2017-03-29 07:40:50 · 476 阅读 · 0 评论 -
[数位DP] BZOJ 2714 [Violet 3]交替和
就是个需要实现的比较精细的数位DP 枚举长度 如果长度是奇数 那么需要的是奇数交替和的和 与 偶数交替和的和 的 差 如果长度是偶数 那么需要的是奇数交替和的和 与 偶数交替和的和 的 和 我一开始以为奇数偶数只要看最后一位就可以了 实际上在奇数进制下并不是这样#include<cstdio>#include<cstdlib>#include<algorithm>#include<cs原创 2017-03-13 13:27:45 · 622 阅读 · 0 评论 -
[DP] CCPC 2016 Hangzhou I & HDU 5941 Inequality
有n−1n-1个限制,为xi∗xi+1≥aix_i*x_{i+1}\geq a_i,这里要求xix_i都是正实数。 要求∑xi\sum x_i n≤2000n\leq2000 解肯定是分成若干不短于2的段 每段内部取等号且和最小 那么我们用fi,jf_{i,j} 表示[i,j][i,j]是最后一段取等号的 如果[i,j][i,j]和[i+1,k][i+1,k]取等号时的xixi和xi+1x原创 2017-03-30 07:49:33 · 916 阅读 · 0 评论 -
[笛卡尔树 树形DP] ICPC 2016 Hong Kong G. Scaffolding
你要搭一个一共nn列的脚手架,第ii列放HiH_i根竹子。 你每次只能搬m根竹子上脚手架,并且只能在脚手架左右和向上移动。同时如果左边右边和上面没有竹子,也可以放一根竹子在那里。 问最少需要多少次搬完。 n≤100000n\leq100000直接建笛卡尔树 考虑从高往底拆 然后就可以树形DP了 fif_i表示拆子树ii到他的father的高度需要的次数 gig_i可以顺带算出表示拆了后还剩原创 2017-03-30 08:16:53 · 1948 阅读 · 0 评论 -
[DP] Codeforces 403D #236 (Div. 1) D. Beautiful Pairs of Numbers
考虑dp 令f_{i,j} 表示i个长度不同区间总长为j的方案数 转移有区间全部长度加1 f_{i,j+i}区间全部长度加1再加一个长度为1的区间 f_{i+1,j+i+1}预处理完之后就可以乘个组合数搞一搞了 复杂度O(n2n√)O(n^2\sqrt n)#include<cstdio>#include<cstdlib>#include<algorithm>using namesp原创 2017-03-14 10:55:03 · 559 阅读 · 0 评论 -
[字符串Hash DP] Codeforces 613E #339 (Div. 1) E. Puzzle Lover
写这个东西的时候很需要冷静 一些细节 比如特殊情况不可避免的重复计算 很恶心 然后 自然溢出被sxbk的hacker卡了 我还因此去学习了怎么卡 构造串卡掉自然溢出BY PoPoQQQ#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>#define cl(x) memset(x,0,sizeof(x)原创 2017-04-09 20:40:37 · 897 阅读 · 0 评论 -
[DP] BZOJ 4758 [Usaco2017 Jan]Subsequence Reversal
reverse一个子序列就是从两端开始swap 然后我们就可以转移了 关键的状态设计是fi,j,l,rf_{i,j,l,r}表示 区间[i,j][i,j] 左边的数是ll 右边的数是rr 的答案#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;#defin原创 2017-04-02 13:10:10 · 977 阅读 · 0 评论 -
[我可能是个SB啊] UOJ #290 【ZJOI2017】仙人掌
这好像不难啊 考场上智商掉线了吧 可能是脑袋被吃掉了吧先说正经的 这个题 要是不是棵仙人掌 那么就无解 要是是棵树 直接树形DP 那仙人掌呢 把所有环上的边拆掉 对剩下的森林中的每棵树DP 然后乘法原理就好了 然后 做完了…还是不知道考场上在干什么我可能忍不住分享下自己的悲惨经历啊 考场上想出了树形DP 然后就没有然后了? 尼玛仙人掌这么好想 就被我弃了?! 行吧 考挂不如狗 下午切这原创 2017-03-24 20:15:54 · 844 阅读 · 0 评论 -
[树形DP] BZOJ 4013 [HNOI2015]实验比较
首先缩点 然后肯定会变成一颗森林 不然无解 弄一个超级根 然后 fu,kf_{u,k} 表示子树 uu 划分成 kk 段的方案数 合并的时候 ii 段和 jj 段可以合并成 kk 段 k∈[max{i,j},i+j]k \in [max\{i,j\},i+j] 用组合数算一下就好了#include<cstdio>#include<cstdlib>#include<algorithm>原创 2017-04-05 20:57:00 · 293 阅读 · 0 评论 -
[树的直径 树形DP] UOJ #11【UTR #1】ydc的大树
题解链接大意是我们求出直径的中心 那么到最远点必然经过中心 把它提到根 就可以在枚举删的白点时很快统计出能够使多少个黑点不高兴#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf;原创 2017-04-05 21:05:17 · 767 阅读 · 0 评论 -
[树形DP 杂题] SRM 562 div1 InducedSubgraphs
集训队作业传送门给一棵nn个结点的树,定义一个结点集合是连通的表示这棵树以这个集合为点集的导出子图是连通图。再给一个整数kk,将树上的结点重新编号,使得对于任意一个满足1≤i≤n−k+11\leq i\leq n-k+1的ii,都满足由所有编号在[i,i+k−1][i,i+k-1]内的结点组成的结点集合是连通的。问这样的编号方式有多少种。1≤k≤n≤411\leq k\leq n\leq 41。大概原创 2017-04-05 21:07:56 · 504 阅读 · 0 评论