DP及DP优化
文章平均质量分 59
DZYO
Never stop
展开
-
集训队作业2018: 通信(区间DP)
题意:题解:想到了大概思路就是不会有相交的非链上的边,然而有一堆细节就鸽了。然后看题解其实就是暂时忽略两边的值来区间DP就行了,设置的状态还挺妙的,中间记个前缀后缀min优化一下,时间复杂度O(n3)O(n^3)O(n3)。#include <bits/stdc++.h>using namespace std;#define opt(x) memset(x,0x3f,si...原创 2018-11-27 11:36:00 · 341 阅读 · 0 评论 -
Atcoder AGC003F :Fraction of Fractal
传送门题解: 神题。 传送门#include <bits/stdc++.h>using namespace std;typedef long long LL;const int N=1e3+50,mod=1e9+7;inline int add(int x,int y) {return (x+y>=mod) ? (x+y-mod) : (x+y);}...原创 2018-05-21 21:23:43 · 436 阅读 · 0 评论 -
BZOJ5318: [Jsoi2018]扫地机器人(DP)
传送门题解: 考虑朴素DP,我们可以状压来转移。继续观察性质: 如果是n∗nn∗nn*n的方阵,那么副对角线元素相同。 如果是n∗mn∗mn*m的方阵,那么设d=gcd(n,m)d=gcd(n,m)d=\gcd(n,m),每个d∗dd∗dd*d的方阵都与第一个相同。且副对角线相同。这意味着我们不用状压,只需要枚举d∗dd∗dd*d的矩阵中向左移动dxdxdx,向下移动了dy=d−...原创 2018-05-21 15:52:40 · 834 阅读 · 0 评论 -
BZOJ4784: [Zjoi2017]仙人掌(DP)
传送门题解: 好题。先把仙人掌的环去掉变为若干树的问题。对于一种方案,我们把没有被覆盖的边看做重边,那么每种方案对应着一种把边覆盖完的方案。 我们发现任意一种合法的方案,从每个子树都有向父节点连的一条边,一共有degidegideg_i条边(加上当前点向上到父节点的边)。 我们要把这些边组合起来或者直接连到当前点,并连一条边出去。 这个方案数很简单:gi=gi−1+(i−1)∗gi...原创 2018-05-06 20:58:50 · 221 阅读 · 0 评论 -
Topcoder SRM 648 Div1 850 :Fragile(DP)
传送门题解: 首先预处理nnn个点的连通图个数,这是个经典DP,自行百度。。然后我们考虑一个含有桥的图,我们枚举这个桥,然后桥的两边是个子问题递归下去做即可。 注意含有kkk个桥的图会被计算kkk次,最后除以k。注意不含桥的图可以用连通的减去不含桥的图。然后就可以DP了。时间复杂度O(n4logn)O(n4logn)O(n^4 \log n )#include &lt;bi...原创 2018-05-18 19:01:52 · 289 阅读 · 0 评论 -
CS Academy #32 G:Sum of Powers (旋转体积背包)
传送门题解: 用整数划分的方法做旋转体积背包处理出fi,jfi,jf_{i,j}表示将整数iii划分为jjj个数的方案数。然后对于每个数枚举至少被算几次即可。 时间复杂度O(nk)O(nk)O(nk)#include <bits/stdc++.h>using namespace std;const int N=5e3+50, mod=1e9+7;inline in...原创 2018-05-17 11:38:22 · 522 阅读 · 0 评论 -
BJ模拟:帐篷(凸包)
传送门题解: 凸包。注意n,mn,mn,m很大时答案为周长,而周长最小则自动满足凸性,我们只需要枚举起始点即可O(n2)O(n2)O(n^2)DP。时间复杂度为O(n3)O(n3)O(n^3)。n,mn,mn,m很小的时候我们多记录一个前驱即可。 注意DP要从横纵坐标最小的点开始,不然最后首尾的三个点可能不会满足凸性。这一部分的时间复杂度为O(n4)O(n4)O(n^4 ),预处...原创 2018-04-20 21:39:51 · 226 阅读 · 0 评论 -
BZOJ2784: [JLOI2012]时间流逝(树形期望DP)
传送门题解: 任何时候所拥有的球的状态是一个整数划分,且不超过TTT,打表发现不过1.2e61.2e61.2e6种左右。 进一步发现这些关系形成了一棵树, 然后就是经典的树形期望DP,令Ei=kEfai+bEi=kEfai+bE_i = kE_{fa_i}+b即可在O(n)O(n)O(n)的时间内解决。#include <bits/stdc++.h>using name...原创 2018-04-24 21:28:29 · 330 阅读 · 0 评论 -
BZOJ5252/LOJ#2478. 「九省联考 2018」林克卡特树(凸优化)
传送门题解: 问题其实是找k+1k+1k+1条点不相交的链(可以为单个点),使得其边权和最大。显然可以费用流, 且费用流有凸性。 即是: 记iii条链的答案为AnsiAnsiAns_i,则Ansi−Ansi−1≥Ansi+1−AnsiAnsi−Ansi−1≥Ansi+1−AnsiAns_i-Ans_{i-1} \ge Ans_{i+1}-Ans_i。我们二分导数,使得取最优值时个数...原创 2018-04-13 21:10:53 · 846 阅读 · 0 评论 -
BJ模拟:随机游走(树型期望DP)
传送门题解: 好题。又是一种经典模型。先假设没有终止节点。 记fifif_i表示iii到faifaifa_i的期望步数,gigig_i表示faifaifa_i到iii的期望步数。我们发现:每次询问两点,uuu到lcalcalca的fifif_i,vvv到lcalcalca的gigig_i不会失效(可以想想为什么)。 然后处理出这两个数组就直接链查询了。处理就非常Naive了,按...原创 2018-04-10 18:34:37 · 1834 阅读 · 0 评论 -
Atcoder ARC063E:Integers on a Tree(DP)
传送门题解: 我们DP出每个点的取值范围和奇偶性,如果合法那么一定可以构造出一组方案。 原因是保证了相邻的点的取任意值都能构造出解。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { s...原创 2018-04-09 08:45:01 · 498 阅读 · 0 评论 -
Atcoder AGC001E : BBQ Hard(DP)
传送门题解: 将组合数看做网格图上的单增路径之后O(|X|2)O(|X|2)O(|X|^2)做DP即可。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { static char ib...原创 2018-04-08 16:19:42 · 295 阅读 · 0 评论 -
NOI模拟:Binary(分块/Trie)
题意:给nnn个数a1~na1~na_{1 \text{~} n}, 对于i∈[2,n]i∈[2,n]i \in [2,n] , 求 max{ai^aj},max{ai&aj},max{ai|aj}max{ai^aj},max{ai&aj},max{ai|aj} max \{ a_i \text{^} a_j \} , \max \{ a_i \text{&}a_j\} , \...原创 2018-03-24 22:19:26 · 338 阅读 · 0 评论 -
BJ模拟: 装饰地板(矩阵快速幂+拉格朗日插值+特征多项式)
题意: 给一个6∗R6∗R6*R的矩阵,有两种瓷砖(1∗21∗21*2,2∗12∗12*1),贡献分别为s1,s2s1,s2s_1,s_2,一种铺满矩阵的方案的贡献为所有瓷砖的贡献乘积之和,所有方案的贡献和(log2R≤8e3log2R≤8e3\log_2 R \le 8e3)。题解: 非常套路的题,裸的矩乘+状态压缩应该都会。不过因为logRlogR\log R很大,不能直接状压...原创 2018-03-13 19:56:31 · 296 阅读 · 0 评论 -
NOI模拟:深邃(二分+贪心)
题意: 给一棵树,有nnn个点,其中kkk个关键点, 求一种分割方案(断掉一些边)使得每个联通块至少有111个关键点,且使得最大块最小。题解:二分块的限制 , 然后记fi,gifi,gif_i,g_i表示与iii联通的最小块大小, 以及这个最小块是否含黑点,贪心做树形DP即可。#include <bits/stdc++.h>using namespace std;...原创 2018-03-22 19:38:23 · 314 阅读 · 0 评论 -
Atcoder AGC008F : Black Radius(DP)
传送门题解: 定义二元组 (x,d)(x,d)(x,d) 为一个选择 xxx 为关键点,ddd 为最大距离的染色方案。 先考虑全为黑色点的做法: 我们设 f(x,d)f(x,d)f(x,d) 表示与 xxx 距离不超过 ddd 的点的集合。不妨假设 f(x,d)f(x,d)f(x,d) 不是全集,这样答案就是所有本质不同的集合 f(x,d) 个数再加上 1(因为全集总是一种合法的染色方案...原创 2018-03-19 08:53:25 · 636 阅读 · 0 评论 -
BZOJ4540: [Hnoi2016]序列 (线段树)
传送门题解: 这道题的线段树做法好神啊。。考虑直接从111扫描到nnn,不断更新1~i1~i1\text{~}i到iii的最小值。那么显然我们要对线段树支持区间覆盖, 区间求历史和。然后我们可以构造矩阵来完成,对于每个节点构造⎛⎝⎜⎜svallen⎞⎠⎟⎟(svallen)\begin{pmatrix} s \\ val\\ len \end{pmatrix} 即可完成区间覆盖...原创 2018-03-04 10:20:05 · 380 阅读 · 0 评论 -
Atcoder AGC007E : Shik and Travel(DP)
传送门题解: 先二分然后在树上DP。注意到一个子树一定是只进出一次,进去的长度是一个点的深度,出来的长度是另一个点的深度。我们可以对一个点维护一个子树所有这样的状态的单调队列,合并后显然大小为较小子树的大小*2。 时间复杂度O(nlog2n)O(nlog2n)O(n\log^2 n)。#include &lt;bits/stdc++.h&gt;using namespace ...原创 2018-05-16 14:08:14 · 621 阅读 · 0 评论 -
集训队作业2018:Z-function(DP)
传送门题解:枚举相同位置的长度是多少,然后可以设计一个DP,fi,jf_{i,j}fi,j表示第iii位,相同状态为jjj的方案数(注意这里要带个-1的系数方便容斥),然后发现这个状态数很少,就可以过了。#include <bits/stdc++.h>using namespace std;typedef unsigned long long ULL;const in...原创 2018-11-07 19:10:56 · 614 阅读 · 0 评论 -
Topcoder SRM 700 1000pts:AnyNumber(DP)
题解:首先放满一行之后我们强制规定他可以继续放,这样总方案数是A(∑∣S∣,n)A(\sum |S|,n)A(∑∣S∣,n),一个方案可能被算很多次。处理出fi,jf_{i,j}fi,j表示前iii个第一次放满行为jjj的概率,hi,jh_{i,j}hi,j表示前iii个种选一些数放满第jjj行的值的总和(包括第iii个),然后这道题就可以做了。对于fff的处理只需要背包即可,对于hhh...原创 2018-11-09 09:13:17 · 392 阅读 · 0 评论 -
Atcoder AGC015E : Mr.Aoki Incubator(DP)
传送门题解:因为看错题浪费了3个小时。。按照xxx排序后对于每个iii找到最左边比他大的,最右边比他小的,相当于一开始这个区间中必须有被染色的。然后上个线段树优化一下就行了。#include <bits/stdc++.h>using namespace std;#define int long longconst int RLEN=1<<18|1;inli...原创 2018-10-25 16:50:23 · 434 阅读 · 0 评论 -
Codechef:Find a special connected block/CONNECT(斯坦纳树)
传送门题解:这道题真tm恶心啊。颜色数小就直接斯坦树了,颜色大的话则考虑给每个颜色随机映射到[1,K][1,K][1,K]的颜色中,这样的正确率就是K!KK\frac{K!}{K^K}KKK!,概率大概在0.006。多随机几百次就过了。#include <bits/stdc++.h>using namespace std;const int RLEN=1<<...原创 2018-10-17 19:49:45 · 288 阅读 · 0 评论 -
Codechef:Sine Partition Function/PARSIN(矩阵快速幂)
传送门题解:fi,j=∑k=0ifi,ksin((j−k)x)f_{i,j}=\sum_{k=0}^i f_{i,k} \sin((j-k)x)fi,j=∑k=0ifi,ksin((j−k)x)不妨设ci,j=∑k=0jfi,kcos((j−k)x)c_{i,j}=\sum_{k=0}^jf_{i,k}\cos((j-k)x)ci,j=∑k=0jfi,kcos((j−k)x)...原创 2018-10-22 11:35:12 · 329 阅读 · 0 评论 -
Codechef:Little Elephant and Colored Coins/LECOINS(DP)
传送门题解:神题啊。首先像这道题一样,考虑一下出去V1V_1V1外的所有硬币组成的值,我们只用关心它在&VeryThinSpace;mod&VeryThinSpace;V1\bmod V_1modV1下的值即可知道加上V1V_1V1后是否能等同于SSS。这一步是最妙的,因为他把条件限制转化成了求V1V_1V1个点的最小值,把SSS降为了V1V_1V1。然后记一个f...原创 2018-10-15 16:39:40 · 335 阅读 · 0 评论 -
NOI模拟:棋赢
题解:nnn很小,最后是一个跟sum有关的jjj次多项式。维护sumasum^asuma的和即可。 转移矩阵构造可以用拉格朗日插值法。#include <bits/stdc++.h>using namespace std;typedef long long LL;const int RLEN=1<<18|1;inline char nc() { stat...原创 2018-09-21 15:47:19 · 203 阅读 · 0 评论 -
Atcoder AGC012F : Prefix Median
传送门题解:先把aaa排序,bbb 序列能被构造出来,则:ai≤bi≤a2n−ia_i \le b_i \le a_{2n-i}ai≤bi≤a2n−i。不存在i,ji,ji,j,i&amp;amp;amp;lt;j,aj&amp;amp;amp;lt;ai&amp;amp;amp;lt;aj+1i \lt j,a_j \lt a_i \lt a_{j+1}i&amp;amp;lt;j,aj&amp;a原创 2018-09-19 09:42:29 · 722 阅读 · 2 评论 -
Atcoder AGC027B :Garbage Collector
传送门题解: 做这道题的时候脑子抽了,死磕这道题,然后这场爆炸了。首先发现选一段的贡献为5,5,7,9,11..5,5,7,9,11..5,5,7,9,11..,我们枚举选几段,然后贪心分配系数即可。时间复杂度O(nlogn)O(nlogn)O(n \log n)。#include &amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;gt;using namespace std;typede原创 2018-09-16 11:27:39 · 318 阅读 · 0 评论 -
BZOJ 4926: 皮皮妖的递推(DP)
传送门题解: 如果我们把fnfnf_n看做nnn的父亲,那么这个图形成一棵树,fmnfnmf^m_n即为nnn的第mmm个祖先。我们有fn+fmn−1=nfn+fn−1m=nf_n+f^{m}_{n-1}=n,那么可以知道,深度是随着编号而连续且单调不降的。同时,如果我们设深度为iii的有gigig_i个,那么有: {gi=1gi=gi−1+gi−m(i≤m+1)(i&gt;m){gi...原创 2018-07-05 22:25:31 · 293 阅读 · 0 评论 -
Atcoder AGC022F :Checkers
传送门题解:如果我们让A关于B对称,那么就把B连向A。 容易发现任何一个方案最终都会形成一棵树。考虑每个点对最终答案的贡献,容易发现为2d2d2^d。不过还有一个±1±1\pm1的系数。我们发现,当一个点的儿子个数为kkk,有⌊k2⌋⌊k2⌋\lfloor \frac{k}{2} \rfloor个儿子会被取反,而且当kkk为奇数时,自己的状态也会被取反。现在我们可以发现两个方案...原创 2018-07-04 20:40:20 · 718 阅读 · 1 评论 -
Codeforces 346D :Robot Control
传送门题解: 这道题好神啊。首先如果原图是DAG,那么DP显然: fi=min{min{fv+1},max{fv}}fi=min{min{fv+1},max{fv}}f_i = \min \{\min\{f_v+1\},\max\{f_v\} \}这是一个0/1最短路, 从小到大DP,维护队列0/1即可。不过这道题是有环的,这样DP会出问题。 不过我们发现,成为min的是第...原创 2018-07-09 21:38:18 · 444 阅读 · 0 评论 -
雅礼集训6.25 : gift (DP)
题意: (n≤2000)(n≤2000)(n \le 2000)题解: 好神啊。首先考虑如果序列已知怎么做,我们把(ai,bi)(ai,bi)(a_i,b_i)看做图中的边,那么形成若干环,答案就是 n−环数n−环数n-环数。考虑如果不已知,那么已经有的边肯定形成若干条链。 我们先把已经有的环丢掉,再把形如: (0a1a1a2a2......anan0)(0a1a2...an...原创 2018-06-25 19:08:43 · 215 阅读 · 0 评论 -
LOJ#6040. 「雅礼集训 2017 Day5」矩阵
传送门题解: 我们考虑一组A∗B≡C(mod2)A∗B≡C(mod2)A*B \equiv C \pmod{2}的一组合法解中A,CA,CA,C的关系。首先CCC的列向量一定在AAA的列向量所组成的线性空间里(根据矩阵乘法的过程)。具体,我们设AAA的秩为xxx,那么合法BBB的个数就有(2n−x)n(2n−x)n(2^{n-x})^n 个(因为每一列对应一个异或方程组,自由变量都有...原创 2018-06-01 10:05:56 · 995 阅读 · 0 评论 -
BZOJ3157/BZOJ3516/BZOJ4126:国王奇遇记(DP)
传送门题解: 虽然我知道这只是弱化版,不过其他两道太神了看不懂,而且今天学的扩展板也还没有消化,就先水一水这道题吧。观察这个式子:fn,m=∑i=1nimmifn,m=∑i=1nimmif_{n,m}=\sum\limits_{i=1}^n i^m m^innn远远大于mmm,不能直接枚举。 那么怎么办?递推! fn,mfn,mf_{n,m}的大部分信息在前面已经计算出来过,我们...原创 2018-03-16 22:35:56 · 724 阅读 · 1 评论 -
Atcoder AGC002 F : Leftmost Ball(DP)
传送门题解: 很妙的一道题。考虑怎么统计得不重不漏,每一种方案的除了白点的每一种颜色第一个出现的位置一定不同而且有顺序, 我们可以强制这个顺序为1→n1→n1 \rightarrow n, 最后乘上n!n!n!。 同时,我们可以把每种方案的白点按照这个顺序赋颜色 (因为每一种方案这样赋颜色肯定合法,而且每一种合法的方案这样染色回去一定对应一种原始方案,所以他们的关系是双射)。现在问题...原创 2018-03-15 20:35:10 · 359 阅读 · 0 评论 -
Atcoder ARC70 E - NarrowRectangles(堆)
传送门题意: 有NNN个高为111的矩形,第iii个矩形的y轴范围为[i−1,i][i−1,i][i-1,i],xxx轴范围为[li,ri][li,ri][l_i,r_i]。 需要横向移动一些矩形,使得所有矩形是连通的(角也算),对于一个矩形,横向移动xxx距离的代价为xxx,求出最小代价。题解: 设fi,jfi,jf_{i,j}表示yyy轴坐标为iii ,xxx轴rrr的坐标为jj...原创 2018-03-15 09:51:58 · 519 阅读 · 0 评论 -
51nod1673 树有几多愁(状压DP)
传送门 lyk有一棵树,它想给这棵树重标号。 重标号后,这棵树的所有叶子节点的值为它到根的路径上的编号最小的点的编号。 这棵树的烦恼值为所有叶子节点的值的乘积。 lyk想让这棵树的烦恼值最大,你只需输出最大烦恼值对1e9+7取模后的值就可以了。 注意一开始1号节点为根,重标号后这个节点仍然为根。:数据保证叶子节点个数<=20。题解:状压DP。首先想到对于每个叶子节点到根原创 2017-10-23 20:28:56 · 392 阅读 · 2 评论 -
BZOJ3928: [Cerc2014] Outer space invaders(区间DP)
传送门题意: 有N个外星人,第i个外星人会在ai时间出现,离你距离di,并且必须在bi之前被消灭。你有一把很NB的武器,攻击范围是个半径为R的圆,R可以任意调整,不过你以R的范围每攻击一次就要消耗R单位能量。外星人被攻击一次就会死掉。求需要消灭所有外星人的最小消耗能量。 N<=300, ai,bi,di<=10000 题解: 感觉这篇题解已经写得非常好了。把每个外星人看做有高度的线段原创 2017-10-23 17:16:30 · 401 阅读 · 0 评论 -
BZOJ4380: [POI2015]Myjnie(区间DP)
传送门 有n家洗车店从左往右排成一排,每家店都有一个正整数价格p[i]。 有m个人要来消费,第i个人会驶过第a[i]个开始一直到第b[i]个洗车店,且会选择这些店中最便宜的一个进行一次消费。但是如果这个最便宜的价格大于c[i],那么这个人就不洗车了。 请给每家店指定一个价格,使得所有人花的钱的总和最大。题解:区间DP好题。 首先观察数据可以知道这个DP肯定是n2mn^2m或者n3原创 2017-10-12 19:33:12 · 323 阅读 · 0 评论 -
BZOJ1260:[CQOI2007]涂色paint(区间DP)
传送门 假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。题解:区间DP感觉gyr神犇讲得非常透彻。考原创 2017-10-12 23:05:41 · 485 阅读 · 0 评论 -
BZOJ4350: 括号序列再战猪猪侠(区间DP)
传送门 括号序列与猪猪侠又大战了起来。 众所周知,括号序列是一个只有(和)组成的序列,我们称一个括号 序列S合法,当且仅当: 1.( )是一个合法的括号序列。 2.若A是合法的括号序列,则(A)是合法的括号序列。 3.若A,B是合法的括号序列,则AB是合法的括号序列。 我们考虑match[i]表示从左往右数第i个左括号所对应的是第几个右 括号,现在他得到原创 2017-10-21 12:01:18 · 453 阅读 · 0 评论