dp
pbihao
这个作者很懒,什么都没留下…
展开
-
【BZOJ 3791】作业 dp
有点意思的dp。需要明确的就是把每一次的染色当做划定区间,最后只会最多有2*k-1个区间,就。。。。可以dp了设f[i][j][p]为分成i段,前j位最后一个数字为p的最优值两种策略:1.涂色 f[i][j][p]=max(f[i][j][p],f[i-1][j-1][p^1]+(a[j]==p))2.不动 f[i][j][p]=max(f[i][j][p],f[i][j-1]原创 2017-02-25 12:03:45 · 290 阅读 · 0 评论 -
【noip 2015】字串 dp
定义dp[k][i][j]表示用A串的前i个元素的其中k段来组成B串的前j个的方案数首先考虑On4的转移:1.A[i]!=B[j] 毫无疑问 f[k][i][j]+=f[k][i-1][j]2.A[i]==B[j] 那么现在就用很多选择了,例如:第i个元素单独作为一段,或者说A[i-1]==B[j-1]的话还可以和前一个元素一起组成新的一段,然后以此类推就好了所以转移方程:f[k原创 2016-10-31 20:35:26 · 280 阅读 · 0 评论 -
【BZOJ 1084】最大子矩阵
本来一开始的想法是把m==1和m==2的情况分开讨论,也是能做的,现在一想。。。。又是一个dp套路定义f[i][j][k]表示第一段扫到i第二段扫到j一共分为k个矩阵的方案数,然后就可以转移了,就想学长说的,想出dp定义,dp题就做完一半了#include#include#include#define Rep(i,a,b) for(int i=a;i<=b;i++)#define rR原创 2016-11-12 16:03:25 · 230 阅读 · 0 评论 -
【cf 570e】Pig and Palindromes dp
【cf 570e】Pig and Palindromes dp原创 2016-09-27 17:06:26 · 328 阅读 · 0 评论 -
【poj 2127】Greatest Common Increasing Subsequence lics(输出答案坑死)
刚刚学完最长公共递增子序列,这题被输出答案坑死;定义f[i][j]表示A数组前i个元素与B数组前j个元素且必须以B[j]为结尾的最长公共递增子序列(dp定义都是套路)。考虑转移:1.A[i]!=B[j]那么根据定义,这种情况对答案没有影响如果有最长公共递增子序列一定出现咋i之前那么直接f[i][j]=f[i-1][j]2.A[i]==B[j]必须选择i,j所以找到最大的f[i-1][k原创 2016-10-24 18:03:42 · 313 阅读 · 0 评论 -
【poj 1682】Clans on the Three Gorges 多次dp
题意:有三条边,每条边上有点,每个点有权值,要求每一个点都至少建一条边,且边与边之间不能够交叉,花费为两点之间的权值之差,求最小权值。什么,居然有三条边,如果考虑把三条边的每一个点都放进dp里面作为一维的话,一一得一,三七二十一,那得有多少种情况啊?我不会三维的dp,但我会二维啊,可以先跑三次dp,预处理出从任意一条边的一个点到另外一条边的最小花费,实际上是有6种情况的,但是从a1 到原创 2016-08-22 08:45:07 · 478 阅读 · 3 评论 -
【bzoj 1237】[SCOI2008]配对 dp
一开始天真的以为数据范围是104,万恶的科学计数法qaq。题目中有说到保证a数组中没有两个数相同,b也是一样,所以唯一的限制就是A[i]==B[i]的情况,而自己动手画一下,即使所有数都相同,但只要是大于3个数就可以两两不相同的配对,而如果选用了更远的点,答案一定不会更优,因此,dp过去就好了。提醒一下,注意爆int#include#include#include#include#原创 2016-10-18 21:37:21 · 228 阅读 · 0 评论 -
【洛谷 1040】加分二叉树
【洛谷 1040】加分二叉树原创 2016-10-03 15:27:02 · 271 阅读 · 0 评论 -
【BZOJ 1055】[HAOI2008]玩具取名 bool型dp
定义f[i][j][k]表示区间i->j这一段能否通过一定的变换转化成k这一个单个的字符,然后,好像就没有然后了,转移就好了#include#include#includeusing namespace std;int p[5],n;bool f[210][210][5],vis[210][210][5];char s[210],mat[5][20][3];char c[]={'原创 2016-11-07 21:33:35 · 293 阅读 · 0 评论 -
【bzoj 1068】[SCOI2007]压缩 区间dp
做完bzoj 1090之后来写这一道题简直就是毒瘤啊!!!!!!虽然主要是怪我没有认真读题,凭着对上一道题的理解,来写着一道,但还是忍不住心累(bzoj 1096:http://blog.csdn.net/pbihao/article/details/52923289)首先这一道题的R是将到M为止 的所有全部复制也是两道题最大的不同例如aaaaaa在压缩以后只能是aaaR 不能是aaRR而在上原创 2016-10-26 19:59:14 · 311 阅读 · 0 评论 -
【poj 2411】Mondriaan's Dream 状压dp(轮廓线性dp)
好吧,终于可以来填这一道题的坑了,说来我和这一道题也是有些渊源了吧,因为是一道非常经典的轮廓线性dp所以后人的改进算法也是非常之多,导致出现了一大批位运算技巧满天飞的看不懂,每次又静不下来写,所以耽搁了很久了。参考代码:http://www.cnblogs.com/keam37/p/3834490.html?utm_source=tuicool其实还是比较喜欢这种用dfs写的,代码原创 2016-08-24 21:11:00 · 282 阅读 · 0 评论 -
【BZOJ 1047】 [HAOI2007]理想的正方形 单调队列(也可以dp水)
BZOJ上面是总时间,所以这一道题在BZOJ上是可以直接用滚动数组水过去的,但是还是不推荐,不过还是写出来吧#include#include#include#define mmax(a,b,c,d) max(a,max(b,max(c,d)))#define mmin(a,b,c,d) min(a,min(b,min(c,d)))using namespace std;int f[原创 2016-11-14 20:13:40 · 311 阅读 · 0 评论 -
【BZOJ 1030】[JSOI2007]文本生成器 Ac自动机+fail树上dp
这道题要简单一些,其实我想提的是大白在介绍Ac自动机的时候引入的例题,刚刚看了一下,在P217 字串那道题,有相似之处,都是构造出fail树然后树上跑dp,唯一区别在于那道题是概率dp,很好的题目。思想:首先,我们明确如果直接求有多上符合条件是非常麻烦的,所以我们采用逆向思维,求出所有不合法的方案然后用总的方案减去不合法的方案。至于怎么求不合法的方案,首先构造出fail树,然后当我们每随机生成原创 2016-12-06 09:36:09 · 372 阅读 · 0 评论 -
[BZOJ 2216][Poi2011]Lightning Conductor 单调性dp
利用单调性dp#include#include#include#include#include#define maxn 500021using namespace std;int n,a[maxn];double f[2][maxn];struct node{ int x,l,r; node(int a=0,int b=0,int c=0):x(a),l(b),r(c){原创 2017-03-04 10:06:29 · 218 阅读 · 0 评论 -
【BZOJ 3687】简单题 dp+bitset
很有意思的一道题目,首先我们可以注意到题目中有一个提示就是 ∑ai≤2000000,这就说明所有的子集的和即所有的情况数目也是小于等于2000000的,于是想到dp,对于异或运算,当一个算数和出现偶数次就对答案没有贡献了,所以f[i]表示算数和i出现了奇数次还是偶数次。考虑没添加进一个新的元素,都可以和之前的任意一个集合(包括空集)组成一个新的集合,但是如果每一次的全部的更新之前的答案的话时间原创 2017-02-03 13:46:12 · 283 阅读 · 0 评论 -
【BZOJ 3594】[Scoi2014]方伯伯的玉米田 树状数组
显然,要拔i,那么拔i->n一起一定不会更差(后面的相对高度不变,但是比前面的高度高的可能性更大),所以,就变得水水的了。设f[i][j]为高度为i,被拔过j次的最长不下降子序列,然后用二维数组维护 就可以了。值得一提的是,不要把拔0次,即不拔的情况考虑掉了,我还因此wa了几发。。。郁闷#include#include#includeusing namespace std;in原创 2017-02-24 10:49:49 · 234 阅读 · 0 评论 -
【BZOJ 2286】[Sdoi2011消耗战 虚树+dp
没什么好说的,虚树+dp#include#include#include#include#define maxn 500021#define LL long longusing namespace std;void read(int& x){ x=0;char c=getchar(); for(;c>'9'||c<'0';c=getchar()); for(;c>='0'&原创 2017-02-15 09:18:43 · 213 阅读 · 0 评论 -
【BZOJ 3611】[Heoi2014]大工程 虚树+树形dp
虚树的典型特征,n值特别大,但是∑k又很小,所以每一次构建虚树然后树形dp。虚树:http://blog.csdn.net/thy_asdf/article/details/50387136学习了一波还是蛮不错的东西。#include#include#include#include#define maxn 1000021#define LL long long usin原创 2017-02-15 08:01:48 · 221 阅读 · 0 评论 -
【BZOJ 1025】[SCOI2009]游戏 置换+dp
又是一个套路。。。。我们把每一种关系当作一条边,那么最后会形成一个n个点n条边的图,每出现一个环就是循环了,所以问题就是求这些环的最小公倍数的种类,手画一下会很容易发现,这个图由于是n个点n条边,所以至少出现一个环,而且环与环不会相交,也就是说,∑环的边数#include#include#include#define maxn 1020#define LL long longus原创 2017-01-15 08:38:09 · 224 阅读 · 0 评论 -
【BZOJ 4300】绝世好题 递推
按位递推就可以了。。。。就觉得这个名字还不错。。。#include#include#include#define cmax(a,b) (a=max(a,(b)))using namespace std;int f[33];int n,ans=-1;int main(){ scanf("%d",&n); for(int x,mx,i=1;i<=n;i++){原创 2017-01-07 15:26:16 · 248 阅读 · 0 评论 -
【BZOJ 4518】[Sdoi2016]征途 斜率优化dp
化简以后就是裸的斜率优化dp了,如果不清楚斜率优化的话推荐去写玩具装箱,倒不是简单一些,只是题目老一点,有很多关于斜率优化的介绍#include#include#include#define LL long longusing namespace std;LL f[3020][3020], sum[3020];int q[6020],n,m;double Q(int a,in原创 2016-12-29 17:26:23 · 229 阅读 · 0 评论 -
【BZOJ 1014】 [ZJOI2008]骑士 树形dp
n个点n条边,虽然不是一个树但还是很接近了,想象一下如果只有n-1条边的情况那么就可以直接套最大独立子集了,so easy。但是这一道题居然环,先别怕,因为只是多了一条边所以即使构成环那么最多只有一个环,只需要找出来,断掉一条边就是一个树了,然后以这条边两边的节点为根做最大独立子集,规定两个节点均不可选情况下的最大值,最后,注意题目中的可能是一个森林#include#include#inclu原创 2016-12-04 15:01:43 · 259 阅读 · 0 评论 -
【bzoj 4016】[FJOI2014]最短路径树问题 树分治+树形dp
【bzoj 4016】[FJOI2014]最短路径树问题原创 2016-09-26 14:38:57 · 415 阅读 · 0 评论 -
【BZOJ 1076】 [SCOI2008]奖励关 期望dp
首先看到n的范围非常的小,所以考虑状压f[i][j]表示现在扔到i次,然后第二维表示有那些吃过,所以转移就是f[i][j]+=f[i-1][k]且pre[i]&k==pre[i]但是考虑如果是顺推的话很难判断条件是否合法所以一个常用套路就是逆推,而只是改变的转移方向,方法不变期望公式期望=∑得分*概率这一步的期望=(上一步的期望+本次得分)*概率#include#incl原创 2016-11-06 21:23:53 · 246 阅读 · 0 评论 -
【BZOJ 1046】[HAOI2007]上升序列 lis
额,一开始没有认真读题,我以为最小字典序输出是数字大小最小字典序,结果是位置,我靠水我呢。倒过来做一次最长下降子序列(手顺一下子写成最长不上升子序列,一个元素有重复,一个没有重复),得到重每一个位置开始的最长上升子序列(就是倒过来的最长下降),输出的时候贪心,能输出就直接输出#include#include#include#includeusing namespace std;i原创 2016-11-06 20:06:35 · 187 阅读 · 0 评论 -
【hdu 5800】To My Girlfriend dp+乱搞+总结
【hdu 5800】To My Girlfriend dp+乱搞+总结原创 2016-08-23 21:08:33 · 311 阅读 · 0 评论 -
【poj 2228】 poj 2228 Naptime dp 环形dp的特殊处理
【poj 2228】 poj 2228 Naptime dp 环形dp的特殊处理原创 2016-08-20 18:39:03 · 1048 阅读 · 0 评论 -
【poj 2010】Moo University - Financial Aid 预处理dp
【poj 2010】Moo University - Financial Aid 预处理dp原创 2016-08-20 17:04:43 · 237 阅读 · 0 评论 -
【poj 1770】Special Experiment 树形dp
题意:输入n,m。表示有n个原子和m个光子,接下来有是n个原子的能量和m个光子的能量,如果有任意两个原子之差等于一个光子就会爆炸啦啦啦,叫你选出不会爆炸的最大的原子能量这道题感觉有点马后炮的感觉,discuss里面说不会出现环,所以就放心的将两个会爆炸的点连一条边然后就变成了一个经典问题:选父亲就不要儿子,求最大值,好像叫最大独立子集神马的对吧,不记得了,反正就那么一回事#incl原创 2016-08-20 15:48:44 · 309 阅读 · 0 评论 -
【poj 1636】Prison rearrangement dfs+01背包
题目:首先由T组数据每组数据下是 n,m 。n个人(两边各)m组关系2->接下来m行 每行 a,b,A监狱中的a ,不能与B中的b 一起刚开始拿到这一道题的时候一点思路也没有,如何能够做。首先发现几个事实:1.n数据范围很小2.如果这个人和其他的人之间有关系,那么变动一个人就需要变动多个人,才能保证不会发生冲突所以,定义f[ i ][ j ]表示A原创 2016-08-20 15:14:32 · 406 阅读 · 0 评论 -
【poj 1143】Number Game 博弈论+记忆化搜索
【poj 1143】Number Game 博弈论+记忆化搜索原创 2016-08-20 11:09:22 · 360 阅读 · 0 评论 -
【poj 2127】Greatest Common Increasing Subsequence 最长公共上升子序列lics+路径打印
【poj 2127】Greatest Common Increasing Subsequence 最长公共上升子序列lics+路径打印原创 2016-08-20 09:00:43 · 328 阅读 · 0 评论 -
【cdoj 1323】柱爷的下凡 dp打表预处理
【cdoj 1323】柱爷的下凡 dp打表预处理原创 2016-08-03 09:31:27 · 375 阅读 · 0 评论 -
【cdoj 1357】柱爷与最大区间和
【cdoj 1357】柱爷与最大区间和原创 2016-08-03 08:03:26 · 353 阅读 · 0 评论 -
【cdoj 1330】柱爷与远古法阵 高斯消元
毕竟是本人的第一次写高斯消元,所以你会发现代码与题解神似,至于为什么,无可奉告其实思想蛮简单,主要来谈谈代码#include#include#include#include#define maxn 305#define esp (1e-14)using namespace std;int n,m,f[maxn];long double a[maxn][maxn];/原创 2016-08-05 15:52:28 · 677 阅读 · 0 评论 -
【bzoj 1087】[SCOI2005]互不侵犯King 状压dp
【bzoj 1087】[SCOI2005]互不侵犯King 状压dp原创 2016-09-04 17:05:46 · 294 阅读 · 0 评论 -
【hdu 1011】Starship Troopers 树形dp
树形依赖背包,转移必须是三维,郁闷的是居然写了那么久,因为每一个点即是没有bug还是要一个人去对吧?k必须从1开始,从0开始会wa,而且根必须是1,好扯淡啊#include#include#include#define maxn 105using namespace std;int f[maxn][maxn],n,m,tot,head[3*maxn],w[maxn],ned[maxn原创 2016-10-22 11:32:45 · 161 阅读 · 0 评论 -
【hdu 1024】Max Sum Plus Plus dp
【hdu 1024】Max Sum Plus Plus dp原创 2016-10-22 17:20:22 · 438 阅读 · 0 评论 -
【bzoj 1079】[SCOI2008]着色方案 逆向定义
关于dp的定义嘛一半套路一半脑洞,想到5^16的定义,不知道怎么优化结果又是套路。5^16很大但是16^5小啊,而且只要每一种颜色出现的次数一定,他到底是哪一种 颜色并不影响所以定义f[a][b][c][d][e][x]分别表示出现了一次的颜色个数2次的。。。。但是答案还要求相邻的两个之间不允许出现同样的颜色,那么我们加一维记录上一次选用的是出现了几次的例如说上一次选用的是出现了3次的那么在处原创 2016-10-25 22:05:02 · 229 阅读 · 0 评论 -
【codeforce 713D】Animals and Puzzle dp+二维rmq
给你一个矩阵T次询问询问(x1,y1)->(x2,y2)之间最大的全部由1构成的正方形的边长首先考虑只要求你求出最大正方形的方法。定义f[i][j]表示以(i,j)为左下角顶点的最大的正方形的边长,那么不难写出转移方程f[i][j]=min(f[i-1][j],f[i][j-1],f[i-1][j-1])+1但是现在不仅需要多次查询,而且每一次的查询区间都不一样,那么二维rmq维护dp原创 2016-10-25 21:16:12 · 306 阅读 · 0 评论