【算法】dp
文章平均质量分 78
mysterynoip
蒟蒻OIer
展开
-
LOJ2351「JOI 2018 Final」毒蛇越狱 容斥+子集卷积
题面题目传送门解法暴力显然是枚举???到底填什么,那么单次询问的复杂度为O(2cnt?)O(2^{cnt_?})O(2cnt?),并没有什么可以优化的地方。不妨考虑一个容斥,将???全部看作是111,然后求子集的权值和。但是我们会将某些位置强制为111却填成000的数算入答案,那么我们还要减去这部分的答案。容斥的复杂度为O(2cnt1)O(2^{cnt_1})O(2cnt1)。可以发...原创 2019-10-19 15:07:15 · 389 阅读 · 0 评论 -
LOJ 2316「NOIP2017」逛公园 dijkstra+dp
题面题目传送门解法开始认认真真学习NOIP原题讲两种不同的做法吧:第一种做法:求出从111号点到其它所有点的距离和nnn号点到其它所有点的距离(这个需要建出反向边之后来跑),然后我们设f[i][j]f[i][j]f[i][j]表示从111走到点iii且当前走过的路径长度比111到iii的最短路大jjj的方案数考虑这种做法如何转移,我们现在需要确定fff数组的更新顺序。当存在长度为00...原创 2018-09-25 22:39:38 · 258 阅读 · 0 评论 -
LOJ 2318 「NOIP2017」宝藏
题面题目传送门解法为什么我的状压dp那么丑啊……发现n≤12n≤12n≤12,所以不妨考虑状压dp设f[d][S][rt]f[d][S][rt]f[d][S][rt]表示当前深度为ddd,在根为rtrtrt的子树中有SSS集合内的点的最小代价考虑先枚举rtrtrt的一个儿子是什么,假设为xxx,然后枚举集合S′⊂SS'\subset SS′⊂S作为xxx的子树部分,...原创 2018-09-29 20:19:32 · 270 阅读 · 0 评论 -
Educational Codeforces Round 53 (Rated for Div. 2)
比赛链接Educational Codeforces Round 53 (Rated for Div. 2)A. Diverse Substring题面给定一个字符串SSS,求出一个子串满足子串中出现的所有字母出现次数不超过这个子串长度的一半(下取整),如果不存在输出NO。解法显然,只要不是所有字符都相同,那么这个串一定存在这样的子串。我们只要找到一个长度为2且两个字符不相同的子串就...原创 2018-10-27 21:15:19 · 156 阅读 · 0 评论 -
bzoj 2678 [Usaco2012 Open]Bookshelf dp+multiset
题面题目传送门解法显然有一个O(n2)O(n^2)O(n2)的dp:f[i]=min(f[j]+max(h[j+1],…,h[i])) (s[i]−s[j]≤L)f[i] =min(f[j]+max(h[j+1],\dots,h[i]))\ (s[i]-s[j]\leq L)f[i]=min(f[j]+max(h[j+1],…,h[i])) (s[i]−s[j]≤L)。...原创 2018-11-07 16:06:46 · 193 阅读 · 0 评论 -
Educational Codeforces Round 56 (Rated for Div. 2)
唠嗑这一场题目基本比较模板,所以就稍微写一下题解吧题解A. Dice Rolling有一个色子,六个面为222到777,每一次给定一个数xxx,问可以掷多少次色子使得最上面的数的和为xxx。解法可以发现,尽量用777就可以了,答案显然为⌈x7⌉\lceil\frac{x}{7}\rceil⌈7x⌉。代码#include <bits/stdc++.h>using na...原创 2018-12-20 11:37:11 · 213 阅读 · 0 评论 -
bzoj 3992 [SDOI2015]序列统计 NTT
题面题目传送门解法先考虑一个最简单的dp:令f[i][j]f[i][j]f[i][j]表示前iii个数的乘积对mmm取模为jjj的方案数,转移比较简单,在这里就不写了。但是我们会发现,转移的时候是乘法,并没有特别好的优化方式。注意mmm是一个质数,一定存在原根ggg。那么,我们就可以用ggg的若干次方表示出[1,m)[1,m)[1,m)中的所有数。现在我们不妨对原来的状态稍作修改,f...原创 2019-02-04 08:54:35 · 200 阅读 · 0 评论 -
bzoj 2149 拆迁队 斜率优化+cdq分治
题面题目传送门解法从来没写过这样的……第一问非常简单,能够从jjj转移到iii的条件显然为a[i]−a[j]≥i−ja[i]-a[j]≥i-ja[i]−a[j]≥i−j,移项可得a[i]−i≥a[j]−ja[i]-i≥a[j]-ja[i]−i≥a[j]−j。不妨令x[i]=a[i]−ix[i]=a[i]-ix[i]=a[i]−i,那么在O(nlogn)O(n\log n)O(nlogn...原创 2019-02-12 19:10:33 · 254 阅读 · 0 评论 -
LG P5156 [USACO18DEC]Sort It Out dp+树状数组
题面洛谷传送门USACO传送门解法结论应该比较显然,就是相当于找字典序第KKK大的LISLISLIS。考虑怎么证明其正确性。对于一次sort(x)sort(x)sort(x)操作,可以发现除xxx之外的元素的相对位置并不发生改变。那么,现在相当于要找一个最大的集合SSS,使得它们在序列中严格递增。显然∣S∣|S|∣S∣等于LISLISLIS的长度。然后再考虑字典序的问题。最后答案的集合...原创 2019-02-25 21:44:28 · 274 阅读 · 0 评论 -
bzoj 5302 [Haoi2018]奇怪的背包 dp+数论
题面题目传送门解法可以将问题转化成这样一个问题:选出一些数a1,a2,…,ama_1,a_2,\dots,a_ma1,a2,…,am,使得存在这样的x1,x2,…,xmx_1,x_2,\dots,x_mx1,x2,…,xm满足∑i=1maixi≡w(modp)\sum_{i=1}^ma_ix_i\equiv w\pmod p∑i=1maixi≡w(modp)显然需要满足...原创 2019-03-01 22:12:10 · 181 阅读 · 0 评论 -
bzoj 3836 [Poi2014]Tourism 状压dp+树形dp
题面题目传送门解法状压dp+树形dp好题图可能形成多个连通块,对于每一个连通块单独处理,因为相互之间不影响答案。那么考虑对于一个连通块的答案应该怎么计算。因为整个图满足最长路不超过10,那么就意味着dfs时候建出的搜索树深度不超过10,并且非树边必然为返祖边。我们不妨假设000表示这个点被选择了,111表示这个点没有被选择并且它还没有被覆盖,222表示这个点没有被选择但是已经被覆盖...原创 2019-03-04 18:38:57 · 183 阅读 · 0 评论 -
bzoj 5252 [2018多省省队联测]林克卡特树 树形dp+凸优化
题面题目传送门解法简化一下题面就是选出不相交的k+1k+1k+1条链,使得边权之和最大。先写写部分分好了。k=0/1k=0/1k=0/1比较简单,求一求直径就好了,具体细节不再赘述(我记得我当初在考场上的时候竟然用两次dfs求直径,然后因为有负数就只有5分……)k=2k=2k=2可能是大分类讨论,表示并不会……考虑k≤100k\leq100k≤100怎么处理。可以考虑树形dp。f[...原创 2019-03-11 21:03:56 · 158 阅读 · 0 评论 -
bzoj 3672 [Noi2014]购票 斜率优化+cdq分治+点分治
题面题目传送门解法先不考虑树的情况,考虑一条链怎么做。显然可以写出dp:f[i]=min(f[j]+(d[i]−d[j])p[i]+q[i])f[i]=min(f[j]+(d[i]-d[j])p[i]+q[i])f[i]=min(f[j]+(d[i]−d[j])p[i]+q[i])。然后把式子稍作展开,可以发现这显然是一个斜率优化的形式。决策的点坐标为(d[j],f[j])(d[j],f...原创 2019-03-23 16:45:37 · 167 阅读 · 0 评论 -
bzoj 4856 [Jsoi2016]病毒感染 区间dp
题面题目传送门解法首先显然可以发现,某一次回头一定会把之前没有被救过的村庄全都救一遍,那么最后的路径一定是不断向前走然后回头再往前走,直到所有村庄全都被救为止。那么我们可以设f[i]f[i]f[i]表示编号为1−i1-i1−i的村庄全部被救最少的死亡人数。对于转移,可以枚举这一次回头后到达的最后一个村庄,即这一轮最早一开始经过但没有救的村庄的编号jjj,那么便有如下转移:f[i]=m...原创 2019-04-21 21:37:39 · 332 阅读 · 2 评论 -
bzoj 4197 [Noi2015]寿司晚宴 状压dp
题面题目传送门解法思路是真的神仙考虑当nnn比较小的时候怎么做,因为质因子的个数不多,所以将是否取质因子的状态压成一个二进制数然后转移即可然后发现n≤500n≤500n≤500,质因子个数还是比较多的那么我们对于每一个数都分开考虑,可以发现最多只会有一个质因子>n>\sqrt n>n计算一下n\sqrt nn在222222左右,在这个范围内的质...原创 2018-09-24 20:32:11 · 178 阅读 · 0 评论 -
bzoj 4565 [Haoi2016]字符合并 状压dp+区间dp
题面题目传送门解法看到K≤8K≤8K≤8,应该会比较直观地想到状压dp考虑一段区间,我们一定是把这段区间合并到不能继续合并为止,这样一定是最优的那么,我们可以设计一下状态:f[i][j][S]f[i][j][S]f[i][j][S]表示将区间[i,j][i,j][i,j]合并成二进制数SSS的最大价值考虑如何枚举中间的分界点kkk,显然是当且仅当区间[k,j][k,j][k,j]这段...原创 2018-09-24 17:39:25 · 191 阅读 · 0 评论 -
bzoj 4818 [Sdoi2017]序列计数 矩阵乘法+dp
题面题目传送门解法将问题稍微转化一下就变得比较简单了直接求似乎并没有那么好做,考虑补集转化,即最后的答案=总方案数-每一个数都不是质数的方案数可以发现,总方案数和每一个数都不是质数的求法其实本质上是一样的,就暂且先只考虑每一个数都不是质数的情况怎么计算答案p≤100p≤100p≤100,那么我们可以将所有非质数按照%p\%p%p的余数分类,记s[i]s[i]s[i]表示%p=i\%p...原创 2018-09-17 22:43:11 · 156 阅读 · 0 评论 -
bzoj 4380 [POI2015]Myjnie 区间dp
题面题目传送门解法有一点技巧的区间dp显然,对于每一个洗车店最后的价格,一定是某一个人想要的价格ccc。如果不是且这个人的要求被满足了,那么一定可以将这个洗车店的价格正好改到ccc,最后的总收益变大那么,我们考虑这样一个dp:设f[i][j][k]f[i][j][k]f[i][j][k]表示区间[i,j][i,j][i,j]的洗车店中,价格最小的为kkk。其中,我们先对每一...原创 2018-08-26 09:30:33 · 231 阅读 · 0 评论 -
bzoj 1003 [ZJOI2006]物流运输 dp+spfa
题面题目传送门解法设fifif_i表示在第iii天时的最小代价 可以先预处理出gi,jgi,jg_{i,j},表示在第iii天到第jjj天时111到nnn的最短路 所以,fi=min(fj+k+gj+1,i×(i−j))fi=min(fj+k+gj+1,i×(i−j))f_i=min(f_j+k+g_{j+1,i}×(i-j))代码#include <bits...原创 2018-08-16 22:29:29 · 114 阅读 · 0 评论 -
bzoj 2004 [Hnoi2010]Bus 公交线路 状压dp+矩阵乘法
题面题目传送门解法挺不错的一道状压dp和矩阵乘法的综合题了吧将题目转化一下,就变成有nnn个数,每一个位置都可以填1−k1−k1-k这kkk个数,必须保证每一段长度为ppp的子区间中这kkk个数都出现过先观察数据范围,发现n≤109n≤109n≤10^9,k≤p≤10k≤p≤10k≤p≤10,感觉对于nnn要矩乘,对于k,pk,pk,p要状压那么我们不妨设fi,jfi,j...原创 2018-08-19 20:53:02 · 158 阅读 · 0 评论 -
bzoj 1009 [HNOI2008]GT考试 矩阵乘法+KMP
题面题目传送门解法用KMP的思想来转移dp,并用矩乘优化很明显,我们可以这样设计状态:设f[i][j]f[i][j]f[i][j]表示现在已经填到第iii位,且与不吉利数字已经匹配了jjj位的方案数。最后的答案显然为∑f[n][i] (i<m)∑f[n][i] (i<m)\sum f[n][i]\ (if[i][j]f[i][j]f[i][j]...原创 2018-08-26 21:29:09 · 154 阅读 · 0 评论 -
bzoj 1426 收集邮票 期望dp
题面题目传送门解法有一定思维难度的期望dp首先,如果直接强行求最后期望花钱的数量是不太可行的那么,我们不妨先求出期望买的张数,然后就可以比较方便地求出最后的答案设f[i]f[i]f[i]表示已经收集到iii种不同的邮票,还需要再购买的邮票数的期望值,不妨就假设那iii种邮票就是前iii种,因为我们并不关心到底购买到的是哪一种那么,关于f[i]f[i]f[i]的转移方程是...原创 2018-08-23 12:57:06 · 167 阅读 · 0 评论 -
bzoj 2595 [Wc2008]游览计划 状压dp+斯坦纳树+spfa
题面题目传送门解法斯坦纳树的经典应用问题就是给kkk个关键点,构造一个连通块,使得这kkk个点连通且代价最小,斯坦纳树就可以解决这类问题其实kkk和棋盘的大小都并没有那么大,只有101010,所以我们不妨考虑状压dp说白了,斯坦纳树这个名词听起来确实挺nb的,但是冷静一下发现就是一个状压dp可以发现,只有2个关键点的时候一定是走最短路,如果出现超过2个点,就不会是最小生...原创 2018-08-20 19:26:59 · 185 阅读 · 0 评论 -
bzoj 1801 [Ahoi2009]chess 中国象棋 dp
题面题目传送门解法dp状态的优化先考虑一下最暴力的做法,就是枚举每一个位置是否有炮,然后最后再暴力检查一遍显然,这对于n,m≤100n,m≤100n,m≤100的数据规模是不可取的那么,我们不妨进行dp,设fi,jfi,jf_{i,j}表示到第iii行为止,每一列放炮的数量情况为jjj的方案数,jjj为一个mmm位三进制数,转移的时候只要枚举在哪一列或哪两列放炮就可以了...原创 2018-08-20 22:15:55 · 152 阅读 · 0 评论 -
bzoj 3302 [Shoi2005]树的双中心 树形dp
题面题目传送门解法细节处理较多的树形dp不妨假设最终的两个带权重心为x,yx,yx,y,显然,存在一条边将这棵树分成两部分,每一部分都离那一个重心最近所以,我们可以枚举那一条边,然后求出它分成的两棵树的带权重心考虑一下这个算法的正确性,尽管对于两棵树的带权重心我们枚举的那条边的分割方式并不合法,但是在我们枚举真正合法的那一条边的时候,这两个点依然是不会变的,所以我们这么做...原创 2018-08-20 23:16:45 · 289 阅读 · 0 评论 -
bzoj 5314 [Jsoi2018]潜入行动 树形dp
题面题目传送门解法细节多到烦死人的树形dp树形背包应该是比较显然的,先考虑如何设计状态设f[i][j][0/1][0/1]f[i][j][0/1][0/1]f[i][j][0/1][0/1]表示点iii所在的子树中选取jjj个点,是否装有通信设备,是否被其子节点监控的方案数假设当前我们做到的节点为xxx,枚举到xxx的其中一个儿子为yyy,假设xxx已经被遍历到的子树连x...原创 2018-08-23 20:32:58 · 251 阅读 · 0 评论 -
bzoj 2337 [HNOI2011]XOR和路径 期望dp+高斯消元
题面题目传送门解法高斯消元对求解期望dp的经典应用显然,我们不能直接求最后异或的期望,但是我们可以对异或值按位考虑那么,问题就转化成求出每一位为111的概率,然后最后的答案即为∑Ei×2i∑Ei×2i\sum E_i×2^i设f[i]f[i]f[i]为点iii走到点nnn某一位二进制位为111的概率,具体是哪一位二进制位直接枚举即可那么,考虑一下如何转移。设jjj与ii...原创 2018-08-23 22:39:06 · 177 阅读 · 0 评论 -
bzoj 3530 [Sdoi2014]数数 AC自动机+数位dp
题面题目传送门解法感觉在AC自动机上dp挺套路的建出Trie图之后,我们可以很自然地表示出状态f[0/1][i][j]f[0/1][i][j]f[0/1][i][j]表示已经做到了第iii位,并且在自动机第jjj个位置,当前的数是否达到上界的数的个数然后转移还是挺方便的,只要枚举下一位是什么,在自动机上的哪一个位置,和普通的数位dp差不多,我就不详细写转移方程了然而,这就...原创 2018-08-28 14:31:01 · 137 阅读 · 0 评论 -
bzoj 5299 [Cqoi2018]解锁屏幕 状压dp
题面题目传送门解法非常基础的状压dp这个状压dp我感觉可以出成提高组难度啊设f[i][j]f[i][j]f[i][j]表示当前最后一个被划到的点为iii,所有点被划到的情况为jjj。000表示还没有被划到,111表示已经被划到了考虑如何转移,枚举上一次划到的点kkk,如果iii和kkk的连线中所有点全部被划到了,那么f[i][j]+=f[k][j′]f[i][j]+=f[...原创 2018-08-24 10:12:30 · 116 阅读 · 0 评论 -
bzoj 3329 Xorequ 数位dp+矩阵乘法
题面题目传送门解法比较简单的数位dp表示x xor 3x=2xx xor 3x=2xx\ xor\ 3x=2x这个方程并不会解,那么我们把小规模的解xxx打出来看看?然后我们就发现,xxx满足这样一个条件:转换成二进制后任意相邻两个二进制位不都为1对于求[1,n][1,n][1,n]中有多少个满足这个条件的数直接数位dp一下就可以了...原创 2018-08-30 14:55:58 · 148 阅读 · 0 评论 -
bzoj 4557 [JLoi2016]侦察守卫 树形dp
题面题目传送门解法比较经典的树形dp我们设fi,jfi,jf_{i,j}表示点iii向下深度为jjj还需要覆盖,深度为jjj以下的点已经被完全覆盖的最小代价,gi,jgi,jg_{i,j}表示点iii这棵子树已经被全部覆盖,并且还能向上延伸jjj层的最小代价那么,我们可以写出下列转移方程:fi,j=∑k∈sonifk,j−1fi,j=∑k∈sonifk,j−1f_{i,j}=...原创 2018-08-18 20:27:09 · 181 阅读 · 0 评论