Processing math: 100%

随笔分类 -  DP

背包,线性DP,状压DP,数位DP,区间DP,期望(概率)DP,数据结构/斜率优化DP
摘要:我太弱了。。。 单调队列优化DP+二分答案。 cpp include include include include include include include include include include include include define fo(i,j,k) for(int i= 阅读全文
posted @ 2018-10-25 21:43 SWHsz 阅读(547) 评论(0) 推荐(0) 编辑
摘要:背包。 cpp include include include include include include include include include include include include define fo(i,j,k) for(int i(j);i=k;i ) define g 阅读全文
posted @ 2018-10-25 11:33 SWHsz 阅读(177) 评论(0) 推荐(0) 编辑
摘要:统计本质不同的LIS个数。 因为本题要求的是N2级别的算法,就直接暴力统计LIS的个数了 然后统计方案数的话加入发现有之间有一个值,以它为结尾的LIS长度和当前的相等,且和当前位置的值相等,就说明已经统计过了这个LIS,就把这个位置的cnt数组赋值成0就行了。 cpp in 阅读全文
posted @ 2018-10-24 07:44 SWHsz 阅读(119) 评论(0) 推荐(0) 编辑
摘要:Keep In Touch:保持联络 Informatik verbindet dich und mich. 信息将你我连结? 发现这个方程很容易列出来。 f[i][j][k]=f[l][m][n] 但是这个方程状态是n3的,转移是n3的,时间复杂度是$O(n^6 阅读全文
posted @ 2018-10-22 17:23 SWHsz 阅读(224) 评论(0) 推荐(0) 编辑
摘要:Orz ljt12138! 设状态f[i][j]表示以i为结尾,公差为j的长度大于1的数列有几个。 然后转移方程就很好想了。 k=H[i]H[j] f[i][k]=i1j=1(f[j][k]+1) 之前的等差数列加上最后那个数形 阅读全文
posted @ 2018-10-22 15:03 SWHsz 阅读(125) 评论(0) 推荐(0) 编辑
摘要:如果L小一点的话方程就很显然了,是$f[i]=min_{j=S}^{j include include include using namespace std; const int N=20005; int f[N],dis[N],L,S,T,M,a[N],ans,sum; bool stone 阅读全文
posted @ 2018-10-22 10:57 SWHsz 阅读(106) 评论(0) 推荐(0) 编辑
摘要:设计状态f[i][j]表示以i为根的子树,包含j个点的最小黑点数,g[i][j]表示以i 为子树,包含j个点的最大黑点数,然后树形背包转移即可。 每次询问的时候就看包含x在不在f[0][y]g[0][y]之间。 因为一个子图每删除一个点,再加入一个点,黑点个数的变化量不超过 阅读全文
posted @ 2018-10-19 22:16 SWHsz 阅读(219) 评论(0) 推荐(0) 编辑
摘要:TJOI2015 组合数学 和组合数学有什么关系呢。。。 本题相当与求该图的最小链覆盖 由Dilworth定理:DAG的最小链覆盖=最大点独立集 最大点独立集对于本图来说就是左下到右上一条最长路。 然后dp一下 $f[i][j]=max(max(f[i 1][j],f[i][j+1]),f[ 阅读全文
posted @ 2018-10-19 19:38 SWHsz 阅读(158) 评论(0) 推荐(0) 编辑
摘要:状态是f[i][a][b][c][d]表示第i个餐车,1号矿洞最近两顿是a,b,2号矿洞最近两顿是c,d。 给的空间是16MB,滚动数组滚动了第一维就行了 (给的变量是char是因为这个不超过256,但是并没有快多少 cpp include include include using namespa 阅读全文
posted @ 2018-10-19 14:41 SWHsz 阅读(214) 评论(2) 推荐(0) 编辑
摘要:[POI2005]BAN Bank Notes ~~POI真好玩。。~~ 如果没有记录方案的话就是一个简单的二进制或单调队列优化多重背包的问题。 但是非常难受的是要记录方案。 而且空间只给了64MB,,令人不适。。。 可以记录状态to[i][j]表示从第i个物品转移到了j体积,这个在转移的时 阅读全文
posted @ 2018-10-19 09:46 SWHsz 阅读(179) 评论(0) 推荐(0) 编辑
摘要:BZOJ2064 分裂 题面感人。。。 可以发现的是如果把所有的数先合起来,再把他们分开,这样是ans的上界,是n+m2 现在我们把之前的国家面积视作+,之后的国家面积视作,就会发现如果有一个子集的sum=0,就说明我们可以让这个子集内部操作。 假设这个子集有k个数,它的操作 阅读全文
posted @ 2018-10-18 16:33 SWHsz 阅读(126) 评论(0) 推荐(0) 编辑
摘要:bitset的操作。 因为bitset左右移很快,然后每加进来一个数相当与给所有的子集都加这个数。因为我们只关心每个数出现次数的奇偶性,然后就相当与f[i]^=f[i-x]。然后就发现对于每个数,可以让原有的xor下自身左移x位,用bitset优化即可。 #include <iostream> #i 阅读全文
posted @ 2018-10-17 09:11 SWHsz 阅读(129) 评论(0) 推荐(0) 编辑
摘要:设状态f[i][j]表示有i个a,j个ab的期望 发现如果i+j>=k的话就再来一个b就行了。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int mod=1e9+6+1; i 阅读全文
posted @ 2018-10-16 23:11 SWHsz 阅读(169) 评论(0) 推荐(0) 编辑
摘要:期望DP。 发现第i次的期望分数和第i-1次的连击次数有关。 设第i次连击次数是g[i] 因为是三次方,f[i]=f[i-1]+(g[i-1]*3+g[i-1]*g[i-1]*3+1)×p[i] 因为(x+1)3展开就是大概这个样子。 但是期望不可以直接乘。 所以我们维护一个次数的平方和次数即可。 阅读全文
posted @ 2018-10-16 17:36 SWHsz 阅读(91) 评论(0) 推荐(0) 编辑
摘要:AC自动机+DP AC自动机NOIP考不考啊。。。 在AC自动机上做个DP。 设状态f[i]表示最远可以匹配到的i,然后在AC自动机上找就行了。 #include <iostream> #include <queue> #include <cstdio> #include <cstring> usi 阅读全文
posted @ 2018-10-14 17:41 SWHsz 阅读(177) 评论(0) 推荐(0) 编辑
摘要:状压并不难,记录一下现在经过点的状态和最后一个经过的点即可。 但是有个限制条件是不能直接经过一个没经过的点。 如果直接做的话就时间复杂度2nn3,卡常+O2也过不了啊。。。Orz 所以预处理出来经过某一对点中间必然经过的一些点。 然后dp的时候就直接判断一下就行了。 时间复杂度可以降一个n然后就A了 阅读全文
posted @ 2018-10-12 08:23 SWHsz 阅读(189) 评论(0) 推荐(0) 编辑
摘要:状压DP 先预处理出来pre[i][S]表示对于第i个位置,往后5个的状态是S时,开心的小朋友的数量。 然后dp的时先枚举前5个的状态,再dp。 因为围栏是环状的,之后统计答案时统计的是那个f[n][S]=startS的。 #include <iostream> #include <cstdio> 阅读全文
posted @ 2018-10-11 16:18 SWHsz 阅读(231) 评论(0) 推荐(0) 编辑
摘要:树形DP. 用倍增处理出来每个点往上能延伸出去的最远路径,nlogn 对于每个节点,如果它能被后代使用过的点覆盖,就直接覆盖,这个点就不使用,否则就ans++,让传的Max改成dp[x] #include <iostream> #include <cstdio> #include <cstring> 阅读全文
posted @ 2018-10-11 08:32 SWHsz 阅读(324) 评论(0) 推荐(0) 编辑
摘要:容斥+背包。 先做完全背包,然后就去掉用的硬币大于限量的,用容斥原理去下重就行了。 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=100005; int c[5],T 阅读全文
posted @ 2018-10-05 19:45 SWHsz 阅读(123) 评论(0) 推荐(0) 编辑
摘要:设状态转移方程 f[i][j]表示前i个人打饭,目前第一窗口的最后一个打完饭的时间是j,最后一个吃完饭的人的时间。 然后n^3转移。 #include <iostream> #include <cstring> #include <cstdio> #include <algorithm> using 阅读全文
posted @ 2018-10-03 21:25 SWHsz 阅读(124) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示