![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
Mmm040403
这个作者很懒,什么都没留下…
展开
-
校内模拟-变形lcs
emmmm a,b2个字符串,a串<=1e6,b串<=1e3,求他们的lcs。那时间复杂度显然是有一些问题的。。。但是我们会发现lcs一定是<=1e3的,所以用f[i][j]表示b的前i个里面lcs长度是j。f[i][j]就可以用我们刚才的类似的方式转移了emmm。想法就是考虑第i个字母是否可以作为最长公共子序列的一员。最后输出就是找到i最大的合法的f[m][i],输...原创 2019-10-26 12:00:29 · 222 阅读 · 0 评论 -
poj1722:substract
这个题其实可以转化成在一些数字之间插上加号或者减号,然后等式的计算结果是t,求方案的一个题。其中第一个数和第二个数的符号是固定的:+,-f[i][j]表示前i个数的运算结果是j时,第i个数前面的符号。所以如果存在f[i][j-a[i]],则可以转移到f[i][j]=1上。同理如果存在f[i][j+a[i]],则可以转移到f[i][j]=0上。这样我们就构造好了这个数组。然后开始找出对于要求...原创 2019-10-25 21:43:54 · 418 阅读 · 0 评论 -
TRIP-LCS方案输出
首先肯定是要求lcs的,这个我懒得讲了。。。因为lcs最多就是这个串的长度,所以我们可以考虑dfs。我们开2个数组,f1[i][j]表示在a串中,f2[i][j]表示在b串中,j之前的第一个‘a’+j在什么地方。因为我们递归的时候知道了lcs的长度,所以我们可以用枚举每一位是啥的方式递归。(26^80emmmm但是可以剪枝)因为知道了每一位是啥,所以我们就可以轻易求出上一个的位置。如果...原创 2019-10-24 21:40:00 · 314 阅读 · 0 评论 -
环状最大两段子段和
https://www.luogu.org/problem/P1121这个题非常有意思。有2种情况,一种是不用首尾相连的方法,另一种是要首尾相连的。首先考虑第一种,应该还是挺好写的吧。。。就是直接算一下。用f[i]表示以第一个数开头到i的最大子段和,g[i]就是表示以最后一个数结尾的到i的最大子段和。然后另外一种情况的话,我们就可以在整个子段中去掉最小的两个子段,然剩下的三段就是最大的了。...原创 2019-10-24 21:16:11 · 266 阅读 · 0 评论 -
mobile service:滚动数组的使用
……并不是什么非常难的题目。1.f[i][x][y][z]表示在第i轮,三个人分别在x,y,z的最小代价。2.然而我们经过思考发现这样设计状态不是很好。在第i轮,一定有一个售货员在s[i]的位置,而且我们并不需要知道这三个人分别在哪个位置(就是ABC只要不在同一位置,所有状态都是一样的)。所以,我们可以缩减一维,f[i][x][y]表示第i轮,有2个人分别在x,y,另外一个人在s[i]。而...原创 2019-10-22 23:17:12 · 143 阅读 · 0 评论 -
花店橱窗布置
题目链接:https://www.luogu.org/problem/P1854因为花瓶和花束的相对顺序都是固定的,所以用f[i][j]表示前i个花瓶里面放前j束花最大利益。对于第j朵花来说,他可以放到位置从i-j都是ok的。所以我们可以枚举这个花的位置j+k,用f[j+k-1][j-1]+a[j][j+k]来更新答案。(感觉上并不是很难嗯哼)但这个题还要输出方案。对于最终结果f[...原创 2019-10-21 19:17:24 · 228 阅读 · 0 评论 -
codeforces-235B-play osu (期望dp)
首先我们不可能把所有的可能情况一个个列举然后计算期望,很不现实。我们可以尝试从头到尾枚举,计算1-n位置期望的贡献。因为贡献是连续的一段的平方,很不好处理,我们尽量变成线性的结构。我们发现,n*n=1+3+5+...+(2*n+1)。所以对于连续的一段,第一次出现的数的贡献是1,第二次出现的是3,第n次出现的是2*n+1,而这正是处理这带有平方的问题的一个小技巧。对于前n个来说,他贡献的期望=...原创 2019-10-09 22:57:09 · 176 阅读 · 0 评论 -
进出栈序列的问题(卡特兰数)
emmm有很多变种?1.C(2N,N)/(N-1)2.递推:枚举k,就是假设第一个元素在第k个出栈。于是可以划分成k-1个数出栈和n-k个数出栈,2边的方案数字乘起来就行。3.动规:f[i][j]表示i个数尚未进栈,j个在栈里,n-i-j已经出栈。f[0][0]=1,目标:f[n][0]f[i][j]=f[i][j+1]+f[i][j-1]...原创 2019-10-02 11:47:40 · 366 阅读 · 0 评论 -
汉诺塔问题
由三个变成了四个啊。一样的做法。考虑先将前i个用四塔的方法置于B,然后用三个的方法搞走n-i个,最后再用4塔的方法搞走i.所以就是min(2*f[4][n]+f[3][n-i]))其中i取1-n那么我们可以推广一下。如果是m个塔,我们可以用前i个用m塔的方法置于B,然后用m-1塔的方法搞走n-i,还是一样算。...原创 2019-09-28 19:51:49 · 176 阅读 · 1 评论 -
小ah和小uim的大逃离
题目链接:https://www.luogu.org/problem/P1373求方案数,然后数据范围800,感觉上就可以dp因为是每个点都可以作为结束点,所以需要2维表示到了这个点2个人的差是k的方案数。为了便于转移,要加一位0/1表示现在是小uim还是小a可以加水。初始状态就是f[i][j][a[i][j]][0]=1(不难理解吧?)这样的话就不要一个一个枚举起点了。#i...原创 2019-09-17 22:30:24 · 924 阅读 · 0 评论 -
Hihocoder的一些dp
Hihocoder P1110 正则表达式一道区间dp。。。总之比较基础吧,不要想太多,直接按照题目说的做就好了。 1:0是正则表达式,1也是正则表达式。 2:P和Q都是正则表达式,则PQ是正则表达式。 3:P是正则表达式,则(P)是正则表达式 4:P是正则表达式,则P*也是正则表达式 5:P和Q都是正则表达式,则P|Q是正则表达式。2,3,4,5用区间dp有着明显...原创 2018-11-29 00:17:22 · 198 阅读 · 0 评论 -
Noip2012-借教室
这个题首先很容易想到枚举1-m,再一个一个加起来,判断一下(最直白的暴力)于是又很容易想到用差分数组可以优化一下。就像这样#include <iostream>#include <cstdio>using namespace std;const int maxn=1000005;int d[maxn],s[maxn],t[maxn],r[maxn];...原创 2018-10-31 14:46:07 · 299 阅读 · 0 评论 -
数位dp
emmmm一些技巧???先上题目!windy数 https://www.luogu.org/problem/P2657数位dp最基础的入门了呢。重要技巧 (划重点嘻嘻嘻)1.如果要求求l-r的区间立的话,转化成[1,r]-[1,l-1],即前缀和的形式,因为这样会很方便qwq2. dp的话要从最高位开始,原因是你要判断是否超过了边界(就是如果前i位都和边界相同,那么i+1位...原创 2019-07-31 23:41:39 · 147 阅读 · 0 评论 -
noip2017逛公园
题目链接:https://www.luogu.org/problem/P395330分1.SPFA先找最短边2.用dp转移方程 f[x][L]->f[y][L+w(x,y)],求f[n][dis(1,n)-dis(1,n)+k]70分然后我们就发现了dp的状态其实没有那么多。如果中间过程已经超过了k的话,就没有必要继续下去了。即优化:只有dis(1,x)<=L&...原创 2019-07-31 00:07:42 · 199 阅读 · 0 评论 -
一些NOI.AC模拟赛的题
1.小奇挖矿 (一道调了n久的线段树)难点:如何把问题转化成几个可以用线段树修改的问题。于是我们就有了几个函数:update, 区间求和,单点求和,找最后一个某个数i在第几个位置。逐一实现即可较难的就是最后一个操作,我们需要知道min,max才能做到,运用二分的思想。若是一个以x为根的子树里最大的数都小于要求的树,那就舍弃这个子树。若是最小值比这个数要小并最大值比这个数要大,那我们...原创 2019-08-06 22:56:40 · 224 阅读 · 0 评论 -
有关斯特林数
1.n个数排列成k个环这种情况即只需要考虑每个人左边是谁就ok啦。考虑第n个人怎么插入,他既可以直接自己成一个环,也可以插到之前的人中间。S(n,k)=S(n-1,k-1)+S(n-1,k)*(n-1) (因为这个人有n-1个地方可以塞进去)S(n,k)表示n个人站成k个圆的方案数2.n个元素拆成m个集合的方案数。与上面的区别是,上面需要考虑每个圆里面的元素是怎么排列的。而...原创 2019-08-14 15:24:40 · 137 阅读 · 0 评论 -
NOIp2018普及组-摆渡车
(作为一名已经离开了普及组的退役选手感到万分庆幸)题目链接:https://www.luogu.org/problemnew/solution/P50171.感觉就是一个类似线性的以时间作为维度的dp,再一看范围:4*10^6 没啥大问题。2.开始思考f[t]的含义:摆渡车在t分钟离开时所有人最少的等待时间。3.接着就是转移:首先比t早出发2*m分钟之前(浪费啊)的和m分钟之后的(...原创 2019-04-08 11:47:18 · 985 阅读 · 0 评论