
动态规划
文章平均质量分 55
值得思考的dp问题
美少女zss
ccpc绵阳铜,icpc西安银,jscpc江苏金。
展开
-
2021南京-Crystalfly-(树形dp+贪心选数)
给你一个树,每个点有个权值,当你走到a点时,所有a的临界点spot的值在vb[spot]秒后飞走。现在问你最大可以拿到多少权值。vb数组的每个值为[1,3]。多多思考,多多总结。原创 2022-11-10 22:18:09 · 435 阅读 · 0 评论 -
牛客多校-Link with Bracket Sequence I-(子序列构造原序列问题+差值dp问题)
就是给你最多100个物品,每个物品有个质量和价值,然后你最多可以操作s次,可以让某个物品的质量翻倍。现在让你选择一些物品,分到两个集合,分完之后,两个集合的体积要一样。然后你获得的价值就是两个集合所有物品的价值之和。就是给你一个长度为n的括号序列,现在问你有多少长度为m的合法括号序列,使得给出的序列是构造的序列的一个子序列。就是给你一个都是小写字母字符串t,现在求有多少长度为m的字符串s,满足t是s的一个子序列。原创 2022-10-30 22:34:31 · 643 阅读 · 0 评论 -
CFdiv2-Pie Rules-(线性dp+博弈状态转移)
就是给你n个数字,Alice和Bob玩一个游戏,首先有个特权,这个特权就是可以让当前的值给自己或者给对方,如果给自己,那么特权转移到对方,如果值给对方,那么特权还是自己的。现在Bob先有特权,问你每个人的得分是多少,当然每个人都会按照自己得分最高的情况去拿。多多思考,多多把dp的转移,和博弈的状态想清楚。原创 2022-10-20 21:09:24 · 148 阅读 · 0 评论 -
CFdiv3-Sending a Sequence Over the Network-(线性dp)
要么放在这一段数字的前面或者后面。然后每一段都放好之后,把你分成的这些段数字再合起来形成了b数组。现在给你b数组,问你这个b数组是否可以由某个a数组拆分再合并之后得到来的。就是说有一个a数组,然后你可以把这个数组分成任意段,然后每段有x。多多思考,多多联想。原创 2022-10-14 21:50:04 · 307 阅读 · 1 评论 -
2020南京-Monster Hunter-(树上背包)
就是给你一棵树,你刚开始可以去掉i个点(i ∈ [ 0 , n ] ),然后计算剩余结点的花费,每个结点的花费为这个子树中没有被删的点的权值。那么现在问你不同的i花费分别是多少。原创 2022-10-12 21:46:49 · 147 阅读 · 0 评论 -
2021台湾-Garden Park-(线性dp+路径计数)
就是给你n个点,n-1条边。然后每条边有一个权值,现在问你一共有多少漂亮的简单的路径,定义漂亮的简单路径为,每个点只能走一次,并且边的权值是要上升的。多多思考,深入思考,试一试。原创 2022-10-03 12:35:48 · 161 阅读 · 0 评论 -
2020沈阳-The Boomsday Project-(线性dp+双指针转移理解)
就是小A会借自行车,给你m个a和b,在第a天借b次。然后借一次的价格是k,不过还有n原创 2022-09-15 17:19:03 · 199 阅读 · 2 评论 -
洛谷-矩阵快速幂-(矩阵加速整理)
给你一个数列a,1原创 2022-09-13 17:21:16 · 402 阅读 · 0 评论 -
CF-Letter Picking(区间dp+博弈论)
给你一个长度2000的字符串。然后每个人轮流每次从字符串的头或者尾取一个字符,然后添加到自己的字符串的前面。如果字符拿完了就停止,如果谁的字符字典序小谁赢,输出谁赢,或者平局。多tm思考思考,把所学的知识结合起来,多动手看看,翻翻博客。原创 2022-09-11 20:41:54 · 523 阅读 · 0 评论 -
CFdiv2-Playlist for Polycarp-(二进制枚举+组合数+记忆化搜索或者暴搜)
就是给你n个音乐,每个音乐有个时间和曲调。然后一共总时间为m,现在问你有多少种不同的组合使得选择的音乐总时间为m,并且任意两个音乐之间的曲调不能相同。数据范围都很小,同时取模。多多简化问题,把复杂的问题简单化多多思考。原创 2022-09-07 13:34:00 · 116 阅读 · 0 评论 -
ABC-Warp-(dp状态的选择+记忆化搜索)
就是在一个平面图上,刚开始在(0,0)点,然后给你6个数a,b,c,d,e,f。每次可以走到(x+a,y+b),(x+c,y+d),(x+e,y+f)。然后给你m个障碍物的下标。现在问你走n次,一共有多少不同的路径。多多思考,多换种状态,当想的差不多的时候,如果出问题就试着去转化转化。原创 2022-09-06 17:45:58 · 254 阅读 · 0 评论 -
洛谷-Fish-(概率+状压dp)
就是给你n原创 2022-09-04 17:25:04 · 253 阅读 · 0 评论 -
ABC-Index-(dp枚举方式优化)
就是给你一个数组,让你选一个长度为m的子序列,然后这个长度为m的子序列为vb数组,那么这个价值为i*vb[i]的总和。一定要搞清楚自己的dp状态定义,要确定好细节。原创 2022-09-04 16:16:34 · 208 阅读 · 0 评论 -
洛谷-收集邮票-(期望dp+期望的平方+平方的期望)
就是有n种邮票,小A去买,每次随机得到其中一张,第k次购买需要k元钱,问你小A获得n种邮票花的钱的期望。原创 2022-09-02 21:03:09 · 401 阅读 · 0 评论 -
洛谷-osu-(期望dp+两个期望一起推)
所以可以维护两个数组,dp[i]为到第i个点,可以产生的贡献,tp[i]为以i为结尾的时候连续o的期望长度。那么s[i]=o,dp[i] = dp[i-1]+(tp[i-1]+1)就是给你一个字符串,要么是o,x,?那么有1/2是x有1/2是o。现在定义一段连续长度为len的o,产生len*len的贡献,现在问你贡献的期望是多少。多多积累方程的转移。原创 2022-09-01 17:48:49 · 126 阅读 · 0 评论 -
洛谷-Bag of mice-(期望dp+记忆化搜索)
就是有a个白老鼠和b个黑兔子,每次小A随机拿一只,如果是白色的,小A赢了。然后小B拿两只,如果最后拿完小A都没拿到白老鼠,那么小B赢了。原创 2022-09-01 15:37:42 · 181 阅读 · 0 评论 -
洛谷-绿豆蛙的归宿-(期望dp+经典转移+基础慨率正推)
就是给你一个有向无环图,每条边有一个权值,然后从1号点出发,每次会等概率的走到其中一个有边的点,问你走到n点期望路径长度是多少。原创 2022-08-31 12:47:30 · 249 阅读 · 0 评论 -
洛谷-Vasya and Magic Matrix-(期望dp+欧几里得距离式子)
就是给你一个n✖m的矩阵,每个点有个值,给定一个出发点,每次可以等概率的移动到一个权值小于当前点权值的点,同时得分加上两个点之间欧几里得距离((x1-x2)×(x1-x2)+(y1-y2)×(y1-y2))的平方,直到走到不能能走为止,问你分数的期望。多推推式子,转化题目的处理方式。对于处理一段区间的平方数什么什么的,都是有公式的一般。...原创 2022-08-31 10:40:53 · 260 阅读 · 1 评论 -
洛谷-游走-(期望dp+拓扑)
P6154题意:就是给你一个n点m边的有向图无环图,可能存在重边,然后小A会随机选择一条路径,都是等概率的,路径的起点和终点可以相同。问你小A走的路径长度的期望,同时对998244353取模。思考:代码:总结:注意细节。...原创 2022-08-30 10:56:21 · 249 阅读 · 0 评论 -
百度之星-逃离这棵树-(期望dp)
就是给你一个树,然后每个点有一个权值,每条边也有权值。刚开始在1号点,有p1概率停在这个点,pi概率走到儿子节点。如果走到叶子节点那么就停止,现在问你停止的期望时间。多推一推式子,写一些就可以了。...原创 2022-08-29 10:07:44 · 566 阅读 · 3 评论 -
VJ-Cleaning Shifts-(线段树优化dp+优化dp的整理)
就是给你n个奶牛,和m天。每个奶牛会在l[i]到r[i]天打扫卫生。现在问你最少要选多少个奶牛,可以使得从第1天到第m天,每天至少有一个奶牛打扫。原创 2022-08-19 15:30:51 · 732 阅读 · 0 评论 -
CFdiv2-Burenka and Traditions-(位运算+dp)
就是给你一个数组,每次你可以选择一段区间[l,r]都异或一个非负整数x,花费为(r-l+1)/2上取整。问你最少要用多少花费,可以使得这个数组都为0。原创 2022-08-17 21:16:38 · 257 阅读 · 0 评论 -
杭电多校-Matryoshka Doll-(dp+巧妙思维)
就是给你n个盒子,每个盒子有个空间,如果a盒子可以装下b盒子当且仅当a-b>=k。现在让你把这些盒子分成m组,每组比如为a b c d,那么需要b装下a,c装下b,d装下c。问你一共有多少种分法。两个组是否不同只看盒子编号不看顺序。...原创 2022-08-16 20:11:55 · 515 阅读 · 0 评论 -
牛客多校-Two Frogs-(期望dp+枚举方式优化dp)
就是现在有n个荷叶,你在第i个荷叶上可以跳到[i+1,i+va[i]]这段区间的荷叶上。当你跳到最后一个荷叶上就结束了。现在小A随机的跳,小B也随机的跳,问你他俩跳到n号荷叶上用的相同步数的期望。多多思考,类比推理。......原创 2022-08-15 14:40:43 · 260 阅读 · 0 评论 -
牛客多校-Birds in the tree-(树形dp+定义本质)
就是给你一个树,然后问你有多少个不同的连通图,这个连通图所有度为1的点颜色都一样。多多思考,多多积累定义状态。原创 2022-08-14 13:49:05 · 184 阅读 · 0 评论 -
杭电多校-Orgrimmar-(树形dp)
就是给你一个树,然后让你选择一些点集,每个点的度原创 2022-08-13 13:34:33 · 231 阅读 · 0 评论 -
CFdiv2-Chip Move-(线性dp+状态枚举方式)
就是dp[i][j]直接从dp[i-j][j]转移过来,因为在i-j之前往后跳,方案都是一样的,我直接从dp[i-j][j]跳步到i这里。因为dp[i-j][j],只是从i-j之前的dp[t][j-1]转移过来的。所以加上这个方案就好了,那么就是dp[i][j] = dp[i-j][j]+dp[i-j][j-1]。就是有n个点,初始在0点,每次你可以跳跃一个长度,但是第一次的长度是k的倍数,第二次是k+1的倍数…转移的话,肯定是从前面中dp[t][j-1]转移过来的,t和i的距离是j的倍数就行。...原创 2022-08-05 12:24:18 · 878 阅读 · 0 评论 -
牛客多校-Link with Level Edito I-(线性dp)
可以定义dp[i]为,所有能从1走到i中的下标最大的1的下标。然后更新的时候先更新maxn数组,看看这个世界的路径中可以到达哪些点。就是用到第i个世界的时候才可达,那么就看看最近的可以走过来的1是哪里。如果是这样的话,可以定义dp[i][j]为,用到了第i个世界,到j点的最小花费。这里要理清的是不是在第i个世界中,到j点。就是给你n个世界,每一个世界都有m个点,然后每个世界有一些有向边。当你在这个世界的时候,你要么停在这个点,要么走到可以走到的点。现在让你选择一段连续的世界,然后可以从1号点走到m号点。..原创 2022-07-28 00:14:07 · 111 阅读 · 0 评论 -
CFdiv1+2-Pathwalks-(树状数组+线性dp)
既然要给的边的顺序,那么肯定就是按顺序枚举边,从前往后,定义dp[i]为选第i条边的最大值。那么到第i个边,要么是从这个边开始,要么是从前面的边来转移,从终点是这个边的起点的边来转移,同时要保证那条边的权值...原创 2022-07-25 23:03:34 · 214 阅读 · 0 评论 -
洛谷-换教室-(概率期望+dp)
对于有n节课,m次申请,很明显了,定义dp[i][j][0/1]为,上到第i节课,用了j次申请,当前申请或不申请,最小期望总和。那么转移的时候,分好情况就行。由于期望值是所有概率累加起来的,所以转移的时候,如果从dp[i-1][j-1][1]来转移,那么看看要加多少期望,这个期望值是好几种不同的情况累加起来的。就是给你n节课,每节课刚开始在va[i]教室,然后每节课都可以申请调换,调换到vb[i]教室,申请成功的概率是f[i]。然后必须要按顺序上课,然后问你在上完n节课,走的路程的期望值最小是多少。...原创 2022-07-20 20:33:09 · 252 阅读 · 0 评论 -
UPC-Cards-(并查集+线性dp)
题意:给你n个卡牌,每个卡牌正面和反面分别有一个数, 所有卡牌正面组成的数字是个全排列。反面组成的数字也是全排列。现在让你选择其中一些卡牌,使得每个数字至少出现过一次。问你方案数。...原创 2022-07-14 21:33:50 · 148 阅读 · 0 评论 -
Acwing-环形石子合并-(区间dp整理)
环形石子合并题意:就是给你n堆石子,成环形排列。现在要合并,合并的石子总数累加得分。问你最后最多能得到多少分,最少能得到多少分。思考:这是区间dp的经典题目。如果把这个环分成n条链去做,复杂度nnnn。但是如果把这个数组扩展一倍,再去区间dp,这样可以把整个一块都操作了,会省去很多重复要做的事,所以是nn*n的复杂度。所以定义l到r段合并的最大值是多少。这样大区间就可以从小区间来更新。区间dp就是用小的区间去更新大的区间,最终整个区间被更新完毕。对于初始化,看看多长的时候合并不会产生值,这里是长度为1的原创 2022-07-13 17:24:11 · 345 阅读 · 0 评论 -
Acwing-能量石-(贪心排序的整理)
能量石题意:就是给你n个物品,每个物品有耗时,总能量,每秒失去多少能量。然后问你最多能吃多少能量。题目保证,当吃一个物品时直接把总能量都吃完,不存在吃着耗着。思考:1.很明显这种题目就是, 肯定是要先排序的,这样dp更新的时候才能更优的去更新。直接选择两个物品,让先选第一个优于先选第二个,然后看看式子,如果有多种情况,排序的时候都枚举出来就可以了。2.对于每个点要减去时间的花费,如果定义不超j肯定不行,无法知道过去了多少时间。所以定义dp[i][j]为,用到物品i,时间恰好为j,最大价值。3.还有一原创 2022-07-09 16:59:21 · 223 阅读 · 0 评论 -
2022江苏省赛-Jump and Treasure-(单调队列优化dp+调和级数)
Jump and Treasure多重背包问题III题意:就是给你n个点,然后每个点有正的金币和负的金币,每次你跳跃的距离不能超过p,然后问你跳超过n的时候,最多能有多少金币。如果跳不出n,那么输出-1。然后给你q次查询,每次给你个x,然后你只能跳到是x的倍数的点上,然后请你输出答案。思考:一看n很大,查询也很大,不用想肯定预处理。然后每次查询i,那么一共n个i直接每个枚举一遍,nlogn复杂度。然后对于子问题,如何处理呢,这种求最大值的。定义dp[i]一般有两种定义状态:1.为走到i点的最大值为多少原创 2022-07-06 20:59:13 · 732 阅读 · 0 评论 -
CFdiv2-Almost Triple Deletions-(正难则反+线性dp)
D题意:就是给你一个数组,然后对于相邻的两个不同的数,必须删掉他俩,但是删的顺序随意。问你最后最多能剩下多少数。思考:很明显,就是删去之后省下的数肯定是相同的。然后数据范围5000,很明显就像是dp了。但是dp该怎么定义呢?刚开始我想dp[i][j]走到i点结尾的数为j的最大可以剩下多少。这样就两重循环了,但是该怎么转移呢?对吧,如果用经典转移又加一重循环,而且第二维度就不要了。直接定义dp[i]以i为结尾的最大可以剩多少。然后转移从前面转移,如果他俩中间的数可以删去,并且i和j的值相同那么可以转移。对原创 2022-07-05 12:22:35 · 419 阅读 · 0 评论 -
Acwing-宠物小精灵之收服-(多维01背包+正序倒序+两种形式dp求答案)
宠物小精灵之收服题意:就是有n个宠物,捉住他们要a的体力和b的精灵球。现在你有m体力,k个精灵球。问你最多能抓住多少宠物,然后在宠物最多的情况下,最多还能剩下多少体力。思考:很明显这个也是可以优化掉枚举物品那一维度。然后三重循环就可以了。对于枚举h的时候,倒序和正序是一样的,因为上次层m就是倒序的,所以h就算是正序,他也每次用的是上一层的,不是这一层的。如果有4层循环呢,一样,只要一层倒序即可。对于要求宠物最多的同时,体力最高。那么直接枚举就行了,找出宠物多的,如果相同那么看体力用的最少的。虽然dp的定原创 2022-07-04 14:50:10 · 262 阅读 · 0 评论 -
2020蓝桥杯国赛B组-搬砖-(贪心排序+01背包)
J题意:就是给你n个砖头,每个砖头有个重量和价值,现在让你把一些砖块垒起来,对于每个砖块,他上面的所有砖块的重量不能超过他本身的价值。问你这个垒起来的砖块价值总和最大是多少。思考:比赛时感觉后面的也都不简单,实际上多思考思考就好了。首先想到的就是dp,但是对于每个砖块怎么保证,他上面的重量总和小于等于他的价值呢,这个该怎么维护呢。实际上在纸上画一画,思考一下可以先处理上面的砖块,再处理下面的砖块,一点一点的处理,因为你如果先处理下面的砖块,你怎么选对吧,才能保证下面的都满足。所以先考虑上面的,从上往下每原创 2022-06-28 20:13:31 · 3327 阅读 · 0 评论 -
2022蓝桥杯国赛B组-费用报销-(线性dp|状态dp)
F题意:就是给你n张票据,每个票据有个时间和价格,你可以选择一些,使得这些票据的日期任意两个差要>=k,然后让总价值最接近m,但是不能超过m。思考:当时比赛的时候我就定义的用到i这个票据最多能表示的数是多少。这样有个弊端,这样可以保证最大,但是可能会超过m,超过m的只能特判,所以这样不能保证最接近m。所以当这样感觉不太合适的时候,可以把总价值成为dp的状态,也就是枚举到i点的时候,为j状态是否可达。然后转移就行了。但是这样的复杂度是nnm,将近1e9。所以会超时,但是可以得大部分分。所以可以进行优化,优原创 2022-06-28 19:37:56 · 3174 阅读 · 3 评论 -
2022蓝桥杯国赛B组-2022-(01背包求方案数)
A题意:就是让你把2022拆分成10个不相同的正整数之和,一共有多少种方法。思考:害,感觉期末一段实际不训练确实脑子很傻逼。比赛的时候想这像那。实际上这就是2022种物品,然后每种物品只能用一次,然后用10个物品组成2022有多少种方案书。定义dp[i][j]代表用了i个物品,此时综合为j的方案书。明显dp[0][0] = 1。然后第一维枚举物品,第二维倒序枚举用了多少物品,倒叙是因为要保证当前枚举的第i个物品,只用一次,因为转移只能从小的转移,但是倒叙枚举的时候,小的还没有被更新,也就是小的还没有用这原创 2022-06-28 17:28:19 · 3074 阅读 · 3 评论 -
2020蓝桥杯国赛B组-补给-(状态压缩+floyd)
补给题意:就是有n个村庄,每个村庄有个坐标,然后1号村庄是基地,直升机一次走的最大路程是m,然后每到一个村庄可以加满油,现在问你把每个村庄都走过,一个村庄可以走多次,然后最后回到基地1号村庄,问你最短的距离是多少。思考:刚开始我一看这种往下走还要回到根节点的这不和之前做的龙龙送外卖一样嘛,再一看这个题目不是树,是图,并且点最多20个,那么很明显了,状态压缩,对于说的每个点可以走多次,那么可以先跑floyd,然后再去状态转移一遍即可。要注意的是最后要求要回到1号点,对于dp[(1ll...原创 2022-06-16 16:13:53 · 366 阅读 · 0 评论