![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
————DP————
Michael_GLF
AFOing
展开
-
Codechef Favourite Numbers(数位DP+AC自动机+二分)
传送门【题目分析】第一次知道数位DP可以和AC自动机套起来用。。。Orz二分是很明显的,可以先计算L前的数量+k再二分,这样不用考虑下界(但我写的是考虑下界,所以跑一次就完了)。然后就是考虑如何统计是否有子串出现,这个地方显然不能强行枚举,但这个问题其实就是询问文本串是否在当前串中出现过,赤裸裸的AC自动机,转移的时候直接在AC自动机上判下一位是否有结束标记即可。【代码~】...原创 2019-02-16 12:03:15 · 429 阅读 · 0 评论 -
NOIP模拟 color(DP)
额呵呵naive【题目分析】这道题强行让所有的变为最小值都能拿到95分233333333333因为都是将一个瓶子的值赋给另一个,那么我们可以枚举最后的值。所以一个瓶子要变化为我们枚举的值,要么直接变为这个值,要么先变成区间最小值,然后再变成这个值,举个小栗子:比如对于3个数2 7 3,我们要将7变成3,如果直接变代价为21,先变成2再变成3代价为20。所以记录两个值取min...原创 2018-10-26 19:53:15 · 149 阅读 · 0 评论 -
NOIP模拟 小C的数组(二分答案+DP验证)
qwq【题目分析】qwq考完发现做法已经接近了。。。。。DP太差了(考场还想区间DP。。。蓝瘦)首先求最大值最小,方法很明显就是二分,然后考虑check函数。很明显的一点,对于两点i,j,如果不需要修改,那么他们的计算结果一定小于等于二分值mid*(j-i),所以我们从最坏情况开始向前枚举。那么最坏情况就是修改所有点,我们记录dp[i]表示前i个全部修改,后i+1~n的点合法最小代...原创 2018-10-24 16:13:01 · 166 阅读 · 0 评论 -
NOIP模拟 蛋糕(DP+Dilworth定理)
QAQ【题目分析】谁能告诉我为什么我的网络流炸了吗。。。。。。。。(我相信是SPJ的锅这年头暴力不好打啊)所以我们按x排序,然后就是要找到序列中严格上升序列的最少个数,然后。。。。duang。。。。Dilworth定理(上升序列的最少个数等于最长不上升子序列长度)关于方案,我们在求最长不上升子序列的时候,可以替换的位置一定是严格小于的关系,所以这两个一定能放在一个蛋糕中,最后每个蛋...原创 2018-10-20 17:04:20 · 190 阅读 · 0 评论 -
NOIP模拟 管道(状态压缩)
多点几次有惊喜【题目分析】看着这个数据范围感觉很状压啊,一直在想状压DP怎么弄,然后爆零滚粗。。。。。。然后发现其实推的没毛病,就是要记录一下之前的状态和每个状态从最后一个点能到达的所有点。还得练练啊。。。。。。【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL;con...原创 2018-10-17 20:07:58 · 194 阅读 · 0 评论 -
洛谷1006 传纸条(双路DP)
冒险寮(由于格式问题就不写题目描述了)【题目分析】手推了一下,最大费用最大流也是可以的,但这是一道比较明显的棋盘类DP,所以双路DP即可。因为来回两次,我们就将其视为两个人在走就行了,可以记忆化优化一下。注意两个人可能走到同一位置,所以要特判一下。【代码~】#include<bits/stdc++.h>using namespace std;const...原创 2018-10-16 19:30:04 · 156 阅读 · 0 评论 -
HDU5800 To my girlfriend(DP)
补一补老早老早以前的坑。。。【题目描述】有 n 个物品,第 i 个物品的重量为 ai 。设 f(i,j,k,l,m) 为满足以下约束的物品集合数量:集合中所有物品的重量和恰好为 m 。集合包含物品 i 和物品 j 。集合不包含物品 k 和物品 l 。给出一个正整数 s ,求:答案对1e9+7取模。【输入格式】第一行,两个正整数 n,s 。第二行,n 个正...原创 2018-10-06 19:35:21 · 119 阅读 · 0 评论 -
NOIP模拟 上升序列(最长上升子序列+状压DP)
【题目描述】给出一个长度为 m 的上升序列 A(1 ≤ A[i]≤ n), 请你求出有多少种 1...n 的排列, 满足 A 是它的一个 LIS.【输入格式】第一行两个整数 n,m.接下来一行 m 个整数, 表示 A.【输出格式】一行一个整数表示答案.【样例输入】5 31 3 4【输出格式】11【备注】对于前 30% 的数据, n ≤ 9;对...原创 2018-10-05 16:25:19 · 200 阅读 · 0 评论 -
NOIP模拟 航班(scc强连通分量+树形DP/双Dfs)
【题目描述】L因为业务繁忙,经常会到处出差。因为他是航空公司的优质客户,于是某个航空公司给了他一个优惠券。他可以利用这个优惠券在任何一个国家内的任意城市间免费旅行,当他的路线跨国才会产生费用。L有一个航空公司的价格表与航线。而且每个城市出发都能到所有的城市,2个城市间可能有不止一个航班,一个国家内的2个城市间一定有不同的路线,但是不同国家的城市间只有一条路线。L想知道从每个城市出发到产生费...原创 2018-10-04 16:47:04 · 195 阅读 · 0 评论 -
NOIP模拟 偷书(状压DP)
【题目描述】在L的书架上,有 N本精彩绝伦的书籍,每本书价值不菲。M 是一个书籍爱好者,他对 L 的书籍早就垂涎三尺。最后他忍受不了诱惑,觉得去偷 L 的书,为了迅速完成这件事,同时他不希望 L 很快发现书籍少了,他决定偷书时,对于任意连续的 k 本书,他最多选 B 本,最少选 A 本。现在他想知道怎么选出来的书本最后使得偷的书籍的价值和,与剩下的书籍价值和,差值最大。【输入格式】...原创 2018-10-01 15:34:10 · 176 阅读 · 2 评论 -
NOIP模拟 整数划分(数论,质因数分解,状压DP)
这道题竟然暴力能拿到90分,大佬orzorzorz%%%%%%%%%%%--------------------------分割线(下面是正解)---------------------------------首先还是暴力,枚举选哪些数;然后是正解:对于N,可以将它质因数分解为(a1^p1)*(a2^p2)*……*(ai^pi)的形式,因为要两两互质,那么令U={a1^p1...原创 2018-09-08 17:06:36 · 346 阅读 · 0 评论 -
NOIP模拟 1807(DP)
T1:1807【题目描述】 给出一个由数字('0'-'9')构成的字符串。我们说一个子序列是好的,如果他每一位都是1、8、0、7,并且这四个数字按照这种顺序出现,且每个数字至少都出现一次(1188888888000007是好的,而1087不是)。请求出最大的好的子序列的长度。【输入格式】 输入唯一一行一个字符串。【输出格式】 一行一个整数表示答案。【输...原创 2018-08-03 10:19:13 · 299 阅读 · 0 评论 -
线性DP:N(log N)的复杂度解决最长不下降子序列问题
当解决最长不下降子序列时,常见的做法是从最后一位向前枚举,同时从该位向后枚举,如果当前位a[ i ]比a[ j ]大且f[ i ]<f[ j ]+1,那么f[ i ]=f[ j ]+1,最后再从前向后扫一遍查询最大值。显然,这种做法并不优秀【什么鬼】,如果序列元素的个数大一点就很容易超时,这里介绍一种N(log N)级别的算法,可以解决当元素个数达到1e5的问题。 思路:我...原创 2018-07-11 11:13:50 · 303 阅读 · 0 评论 -
NOIP模拟 跳格子(Nikola)(DP)
【问题描述】 Tom现在已经成为一个游戏里的重要人物。 这个游戏界面包含一行N个方格,N个方格用1到N的数字表示。Nikola开始是在1号位置,然后能够跳到其他的位置,Tom的第一跳必须跳到2号位置。随后的每一跳必须满足两个条件: 1.如果是向前跳,必须比前面一跳多跳一个方格。 2.如果是向后跳,必须和前面一跳一样远。 比如,在第一跳之后(当...原创 2018-06-26 21:44:07 · 956 阅读 · 0 评论 -
洛谷2599 【ZJOI2009】取石子游戏(博弈论+DP)
传送门【题目分析】这谁想得到要DP啊。。。。。ZJOI果然神题倍出。参考了YYB的博客,传送门。(确实讲的很好!一看就懂!)定义两个数组:和,L[i][j]表示在区间[i,j]左边放一堆数量为L[i][j]的石子,此时先手必败,R[i][j]表示在区间[i,j]右侧放一堆数量为R[i][j]的石子,此时先手必败。如果存在两个或以上的L[i][j],那么显然左边的可以通过取任意个...原创 2019-03-01 20:12:25 · 455 阅读 · 0 评论 -
洛谷4550 收集邮票(期望DP)
传送门【题目分析】 为啥这道题都是道权限题。。。。 虽然代码很短,但是要想清楚还是很难。 令f[i]表示当前已经拥有了i种邮票,要拥有n种邮票的期望操作次数。 那么对于下一次的操作无外乎两种:又一次取到已经得到的邮票和取到新的邮票。 取到已得到的邮票概率为in\frac{i}{n}ni,取到新的邮票的概率为n−in\frac{n-i}{n}nn−i,所以可以得到...原创 2019-03-01 21:03:34 · 277 阅读 · 0 评论 -
洛谷2016 战略游戏(树形DP)
传送门【题目分析】之前觉得这种入门DP很难来着qwq由于n很小,加上可以记忆化,所以直接暴力搜索,枚举父亲是否放了,如果没放那么当前点只能选择放,否则两种都可以,这样dfs下去统计答案即可。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=2e3+10;const int MAXM=...原创 2019-03-01 21:25:23 · 404 阅读 · 0 评论 -
NOIP模拟 成绩单(DP)
传送门【题目分析】随便乱YY了一个DP竟然氵了20pts。。。23333结果正解也看了我好久。。。不愧是T3。。。。。显然这个题最麻烦的地方在于取出中间的一段后如何决策前后两段的取法,显然暴力枚举。。。。bczd所以我们用dp[i][j]表示将i~j这一段全部取出需要的最小代价,cost[i][j][k][l]表示取i~j这一段最大值为k,最小值为l的最后一次操作的代价。显...原创 2018-10-27 20:57:15 · 217 阅读 · 0 评论 -
NOIP模拟 几串字符(数位DP)
内网传送门【题目分析】注:思路由WCR苣佬提供!!!因为考的是基本没写过的数位DP,所以毫无疑问的挂了。。。考虑下面四个性质:最后的01串长度为,因为10,01,10,01是交替出现的。是00出现的次数。是11 出现的次数。所以可以根据将整个序列分割成多段连续0,1,考虑如果没有R的限制,那么就变成了一个经典的球盒问题,卡特兰数计算统计答案即可。考虑加入R的...原创 2018-10-31 20:31:20 · 177 阅读 · 0 评论 -
洛谷2157 学校食堂(状压DP)
传送门【题目分析】用命分析,这个数据范围很状压。。。。。。然后就状压啊。数组dp[i][j][k]表示前i-1个人已经拿到菜,j枚举i以及他后面7个的拿菜情况,k表示上一个吃饭的位置(相对的)注意一下枚举的上下界即可。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e3+10;...原创 2018-11-02 22:03:39 · 237 阅读 · 0 评论 -
Codeforces Round #536 E Lunar New Year and Red Envelopes(DP)
传送门【题目分析】因为延时和unrated的缘故,做了前四道就溜了。。。T5从题目叙述和这个数据范围来看大致能看出是个dp,但因为我太菜了所以没有推出来qwq。然后看了很多遍题解才大概明白怎么做。首先先将每个时间点会选择的信封处理了,因为给定了选择的原则,所以直接按照他说的去模拟就行了,每个点会选择w最大且d最大的那个。然后考虑DP,因为有个时间3s,所以不要怂就是暴力,直接n...原创 2019-02-01 18:06:25 · 354 阅读 · 0 评论 -
第一届“文翁杯”现场竞技赛 T3 文翁点名(字典序k大LIS+树状数组)
校内:传送门洛谷(原题):传送门【题目分析】啊啊啊啊啊啊再给我两分钟~~~~~但好像2min也没法debug完qwq如果我们选出一个集合A进行点名,那么集合中的元素会朝自己应在的位置前进,最后以达到排序的目的,但我们发现集合外元素的相对位置是不会变的,也就是说集合外的元素会构成一个上升子序列。记一个结论:k小集合对应k大补集。所以这道题就转化为求序列第k大上升子序列。求...原创 2019-01-29 20:23:49 · 170 阅读 · 2 评论 -
第一届“文翁杯”现场竞技赛 T1 洗刷刷(DP)
传送门【题目分析】DP好题。。。。但我没做出来qwq。考虑一个四维的dp:记录dp[pos][i][j][k]表示最后一位为pos,颜色R,G,B最后出现的位置为i,j,k,我们可以考虑将询问离线,将所有询问存在询问的r位置,每当扫到该位置就判是否满足右端点在其右端点的所有询问的限制,如果可行就加上这个方案的方案数。最后统计所有pos=n的位置的答案就行了。但可以发现pos这一维其...原创 2019-01-29 19:18:49 · 159 阅读 · 0 评论 -
洛谷2602 【ZJOI2010】数字计数(数位DP)
传送门【题目分析】数位DP果然还是一如既往的恶心啊。。。。按照题意统计10次就行了,要记录两个数组,一个是,这是无限制情况下的答案数,一个是的前缀和,这是有限制的答案数。记得拆数的时候cnt要清零。。。。。【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL;const ...原创 2019-01-22 09:40:54 · 399 阅读 · 0 评论 -
NOIP2018 DAY1T2 货币系统(背包?)
传送门【题目分析】唉,三年OI一场空,不刷原题见祖宗。。。qwq拿着AK巨佬dzy所说的完全背包搞了半天感觉写了个假的。。。。过了氵谷的数据。。。其实还是很明显,如果一个数可以被其他数表示,那么可以不用。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=3e4+10;const ...原创 2018-11-10 21:32:42 · 455 阅读 · 0 评论 -
NOIP2018 DAY1T1 铺设道路(水题)
洛谷传送门【题目分析】呵呵,NOIP竟然出原题,是不是刷过积木大赛这道题的人都禁赛啊?结论很明显,直接找区间最小值减去即可。不知道nlogn的算法能不能过,反正O(n)即可。我选择先读完再扫一遍,当然也可以边读边记录答案。记dp[i]表示消除1~i需要的最小次数,如果a[i]<a[i-1],那么可以直接在消a[i-1]的时候消完a[i],如果a[i]>a[i-1...原创 2018-11-10 14:40:37 · 1740 阅读 · 0 评论 -
SDOJ1037 庆功会(多重背包)
传送门【题目分析】然而蒟蒻并不会单调队列优化。。。。同时也很懒不想写二进制拆分。。。。。所以直接上了三重循环暴力。。。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=1e4+10;const int MAXM=6e3+10;int n,m;int w[MAXN],c[MAXN],...原创 2018-11-09 11:06:53 · 187 阅读 · 0 评论 -
洛谷1048 采药(01背包)
传送门【题目分析】这个两维降一维妙妙妙啊。。。。。。好吧我已经菜的做01背包了。。。。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=110;int n,m;int w[MAXN],c[MAXN];int dp[1010];int Read(){ int i=0,f=1...原创 2018-11-09 10:13:17 · 205 阅读 · 0 评论 -
洛谷2918 买干草(完全背包)
传送门【题目分析】我会说NOIP考前一天现学背包这种大实话吗一眼背包的类型,因为无限多所以是完全背包问题,注意最小值不一定在dp[m],但也不会超过dp[m+5000],所以直接枚举一下即可。【代码~】#include<bits/stdc++.h>using namespace std;const int MAXN=110;const int MAXM=5e...原创 2018-11-09 09:53:27 · 493 阅读 · 0 评论 -
CF989E A Trance of Nightfall(概率+矩阵快速幂优化+倍增)
CF传送门洛谷传送门【题目分析】在zxy大佬的讲解下终于懂了这道题的做法了qwq。。。首先根据题意,出发点不一定在特殊点上,但第一次操作后,之后所有的操作都是在特殊点上,所以先考虑从线上出发的最大概率,再加一步即可得到从点出发的最大概率,二者取较大值即可。记数组f[i][j][k]表示从i点走k步到j点的概率,所以转移方程就出来了:然后发现这个形式其实就是矩阵乘法,所以...原创 2018-11-09 08:56:00 · 296 阅读 · 0 评论 -
HDU2089 不要62(数位DP)
传送门【题目分析】和windy数一题类似,不过限制条件改为了连续的62和4,枚举当前位填的数字的时候判断一下即可。【代码~】#include<bits/stdc++.h>using namespace std;typedef long long LL;const int MAXN=15;LL l,r;int num[MAXN],cnt;int dp[MA...原创 2018-11-07 21:37:55 · 96 阅读 · 0 评论 -
洛谷2657 windy数(数位DP)
传送门【题目分析】数位DP经典题了。考虑直接统计R内的windy数和L-1内的windy数,两者相减即为L~R之间的windy数。考虑DP,记录当前位以及上一位所填的数,当前是否前面为前导零,以及前面一段是否与原数相同。然后按题意逐位计算即可。然后就会惊讶的发现TLE了。。。。。。所以考虑优化:如果当前没有受任何限制,那么可以直接记录下当前位置的值,记忆化搜索。【代...原创 2018-11-07 21:16:42 · 229 阅读 · 0 评论 -
洛谷2607 骑士(基环树+树形DP)
传送门【题目分析】第一眼:咦这不简单树形DP吗?第二眼:嗯?这不是有N条边吗?怎么就树形DP了?第三眼:唉好像拆一条边不就N-1条边了吗?哎嘿嘿我太聪明了。。。。噼里啪啦打完一交,WA完。。。。。。。一脸懵???才发现可能直接将整个图(以为保证连通)拆成两个联通块了。。。。。然后画画图,发现肯定是拆环上的边,搞个并查集记录一下好了。然后对于拆掉的边,直接分别强制两端点不...原创 2018-11-07 19:56:53 · 272 阅读 · 0 评论 -
洛谷3959 宝藏(状压DP bczd)
传送门【题目分析】看看这只有12的数据规模,那么状压没跑了。转移也很好想,枚举起点,更新dp值。。。。。。然后就被hack了。。。。。hack数据:6 6 1 2 100 2 3 1 2 4 10 3 4 10 3 5 100 4 6 10000所以这就是所谓的错误做法又没卡。。。。。。所以放一篇写的很好的博客:传送门所以这里我就放一个状压的程序了qwq(至于膜你退火什...原创 2018-11-06 16:25:12 · 152 阅读 · 0 评论 -
洛谷2899 手机网络(树形DP)
传送门【题目分析】N个点,N-1条边,那么这就是一棵树,再看看这种父亲与儿子之间的相互影响的关系,那么就锁定树形DP做法。当我们确定了一个点为根的时候,所有点的父子关系都确定了。考虑一个点,有三种选择:1.自己建 2.自己不建,由儿子将自己覆盖 3.自己不建,由父亲覆盖,所以开dp[MAXN][3]记录3个状态的最优解。考虑转移。如果当前点选择自己建,那么他的儿子就有两种选择:...原创 2018-11-06 08:35:53 · 527 阅读 · 1 评论 -
NOIP模拟 地球发动机(DP)
传送门【题目分析】哎呀竟然3min看出来DP转移方程了呢。。。。虽然确实很氵。因为最后一个不会对后面造成任何影响,所以从后往前推。转移方程:dp[i]=max(dp[i+1],dp[last]+p[i]),last表示第一个不被影响的发动机。【代码~】#include<bits/stdc++.h>using namespace std;typedef long...原创 2018-11-03 16:14:48 · 159 阅读 · 0 评论 -
洛谷3953【NOIP2017DAY1T3】 逛公园(最短路+DP)
氵谷传送门【题目描述】很仙的一道最短路,想出状态定义后还是比较好做的。首先跑出1到所有点的最短路,记作dis[i]。定义状态方程dp[x][i]表示到点x比最短路大i的路径条数,根据这个数据规模明显直接O(nk)枚举就行。DP转移方程:,这里因为一个点可以被多次搜到,所以记忆化可以做到剪枝效果。而后面这个式子看着长其实移项后就是,其中表示如果走这条边比最短路长多少,然后用当前枚...原创 2019-09-27 20:09:59 · 179 阅读 · 0 评论