![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 61
AC__dream
道阻且长,行则将至;行而不辍,未来可期!
展开
-
2022牛客多校十 F-Shannon Switching Game?(博弈+bfs)
先给定一张无向图,Join和Cut在玩游戏,给定起点和终点,两个人轮流操作,Join每次操作是从当前所在位置走一条边并将该边删除,而Cut每次操作是直接删一条与当前位置相连的一条边,问最后Join能否从起点走到终点,如果能就是Join赢,否则Cut赢原创 2022-08-20 21:15:00 · 207 阅读 · 0 评论 -
2022杭电多校九 1007-Matryoshka Doll(动态规划)
有n个套娃,大小为a1原创 2022-08-16 19:18:09 · 299 阅读 · 0 评论 -
2022牛客多校六 M-Z-Game on grid(动态规划)
两个人在𝑁∗𝑀 N∗M 的网格上轮流移动一个棋子。棋子初始位为(1,1) (1,1) ,每次只能向某一维的正方向移动一格。网格上有一些特殊点,移到标 ’A’ 的点先手胜,移到标 ‘B’ 的点先手败,没有移到特殊点且不能再移动棋子则为平局。问先手是否有必胜、必平局、必败的策略。...原创 2022-08-06 21:57:48 · 165 阅读 · 0 评论 -
(2022牛客多校五)D-Birds in the tree(树形DP)
给定n个节点的树,树上每个节点的颜色为0或1,问最终有多少个子树的所有叶子颜色都是一样的。原创 2022-08-01 22:01:06 · 163 阅读 · 0 评论 -
(2022牛客多校四)A-Task Computing (排序+动态规划)
(2022牛客多校四)A-Task Computing (排序+动态规划)原创 2022-07-31 13:55:52 · 213 阅读 · 0 评论 -
(2022杭电多校四)1001-Link with Bracket Sequence II(区间动态规划)
(2022杭电多校四)1001-Link with Bracket Sequence II(区间动态规划)原创 2022-07-29 21:00:00 · 468 阅读 · 0 评论 -
(2022牛客多校二)L-Link with Level Editor I(动态规划)
(2022牛客多校二)L-Link with Level Editor I(动态规划)原创 2022-07-24 14:09:20 · 302 阅读 · 0 评论 -
(2022牛客多校二)K-Link with Bracket Sequence I(动态规划)
(2022牛客多校二)K-Link with Bracket Sequence I(动态规划)原创 2022-07-23 21:15:25 · 690 阅读 · 3 评论 -
(2022年牛客多校一)I-Chiitoitsu(期望DP)
(2022年牛客多校一)I-Chiitoitsu(期望DP)原创 2022-07-22 16:45:41 · 172 阅读 · 0 评论 -
(2021牛客多校五)D-Double Strings(乘法原理+动态规划)
(2021牛客多校五)D-Double Strings(乘法原理+动态规划)原创 2022-07-14 12:16:09 · 164 阅读 · 0 评论 -
(2021牛客多校一)A.Alice and Bob(博弈)
A.Alice and Bob原创 2022-07-11 19:15:26 · 1014 阅读 · 0 评论 -
2021 RoboCom 复赛 7-2 拼题A打卡奖励(背包)
7-2 拼题A打卡奖励原创 2022-07-09 21:54:43 · 287 阅读 · 0 评论 -
(2022昆明站icpc)Blocks(概率DP)
Blocks原创 2022-07-07 22:55:42 · 396 阅读 · 0 评论 -
(Codeforces800Div2)B. Paranoid String(思维/动态规划)
Paranoid String原创 2022-07-07 21:12:39 · 413 阅读 · 0 评论 -
(Codeforces801Div2)C.Zero Path(动态规划+思维)
Zero Path原创 2022-07-06 22:06:28 · 430 阅读 · 0 评论 -
(第九届蓝桥杯省赛)耐摔指数(动态规划)
耐摔指数原创 2022-05-31 22:20:59 · 70 阅读 · 0 评论 -
(第十二届蓝桥杯第二场省赛)国际象棋(状压DP)
题目:输入样例:3 20 12输出样例:914051446分析:看了一眼数据范围发现这一道题的数据范围比较小,但是发现如果要是搜索的话显然还是复杂度太高,这样的数据范围一般就对应于状压DP。我们先来看一下如何进行答案枚举,我们不妨考虑第i行能够放的马的位置排列,他取决于第i-1行和第i-2行的马的位置排列,这是比较好想的,那么问题来了,每一行最多有100个位置,难道我们要用一个100位整数去枚举吗?那显然是不现实的,我们发现最多有6行,那么我们就可以令行列交换,也就是原创 2022-05-29 14:00:13 · 248 阅读 · 0 评论 -
(第八届蓝桥杯国赛)对局匹配(动态规划)
题目链接:“蓝桥杯”练习系统样例输入:10 01 4 2 8 5 7 1 4 2 8样例输出:6分析:这道题目我们可以分情况进行讨论,先看一下k=0的情况,也就是不能选取相同分数的人,那么很容易想到有多少种不同的积分,那么答案就是几,下面我重点分析一下k!=0的情况,我们可以对所有的分数进行分组,分组规则就是用分数对k取余所得的余数相同的为一组,这样我们可以分为k组,我们可以发现一个性质就是不同组之间的积分是不可能相差k的,也就是说积分相差为k的人一定在同一组,且组与组之间是相原创 2022-05-25 17:52:47 · 287 阅读 · 0 评论 -
(第十届蓝桥杯国赛)最优包含(动态规划)
题目:这道题目类似于求最长公共子序列的题目,看了数据范围基本上就能判断出来这道题目的复杂度是o(n^2)的,下面我直接进行动态规划的分析:设f[i][j]表示用s串的前i个字符包含t串的前j个字符的最少修改次数,我们先考虑s串的第i个字符等于t串的第j个字符的情况,那么就有f[i][j]=f[i-1][j-1],因为我们不需要考虑t串的第j个字符的匹配情况,只需要考虑用s串的前i-1个字符和t串的前j-1个字符的匹配花费即可,默认s串的第i个字符和t串的第j个字符匹配,而如果s串的第i个字符不等于t原创 2022-05-18 19:30:24 · 29 阅读 · 0 评论 -
(第十届蓝桥杯国赛)B:质数拆分(01背包)
2019可以被分解成若干个(不是两个)两两不同的素数,请问不同的分解方案有多少种?注意:分解方案不考虑顺序,如2+2017=2019和2017+2=2019属于同一种方案思路:这道题目考察的是01背包,题目中说分成若干个两两不同的素数,也就对应着背包中的物品只能被选择一次,而且选择物品的数量是任意的,所以就可以先打出一个素数筛,然后直接套01背包即可。f[i]表示用若干个两两不同的素数组成i的方案数,那么对于当前考虑的第j个素数prime[j]就有更新方式f[i]+=f[i-prime[j]],由原创 2022-05-15 19:21:43 · 37 阅读 · 0 评论 -
(HDU3535)AreYouBusy(混合背包)
题目链接:Problem - 3535样例输入:3 32 12 53 82 01 02 13 24 32 11 13 42 12 53 82 01 12 83 24 42 11 11 11 02 15 32 01 02 12 02 21 12 03 22 12 11 52 83 23 84 95 10样例输出:513-1-1分析:这是一个混合背包问题,先分成若干组,再对每组内的物品进行限原创 2022-05-09 15:31:09 · 268 阅读 · 0 评论 -
(2021年第十二届蓝桥杯国赛)D:最小权值(动态规划)
分析:这道题目是用动态规划来解决的,而且比较容易想到状态表示方法:f[i]代表有i个节点的树的最小权值,我们下面来分析一下怎样进行状态转移方程的推导对于有i个节点的树而言,这棵树的权值取决于根节点的左右子树的分布,我们能够枚举的只是左右子树的节点个数分布,无法直接枚举左右子树形态分布,再看一下题目中所给的权值计算方法可以得到一个结论,树的权值是随着左右子树的权值变小而变小的,也就是说在其他条件不变的情况下(这里的其他条件指的是另一棵子树的形态不变以及节点个数不变),改变某一棵子树的形态使其权值变小则..原创 2022-05-06 20:03:47 · 1658 阅读 · 1 评论 -
(HDU - 3506)Monkey Party(区间DP+四边形不等式优化)
题目链接:Problem - 3506样例输入:85 2 4 7 6 1 3 9样例输出:105这道题目题意与环形石子合并题意是一样的,可以直接参考注意是环形的,也就是两边的石子也是可以合并的,这两道题目的唯一区别就是数据范围不同,普通的环形石子合并复杂度是O(n^3)的,n=100是可以直接三重for循环dp求解,但是这道题目的范围是n=1000的,无法直接O(n^3)求解,必须进行优化,常见的优化区间动态规划问题的方法就是四边形不等式,不知道四边形不等式的小伙伴可以原创 2022-05-03 11:37:15 · 293 阅读 · 0 评论 -
(ZOJ1149)Dividing(二进制优化多重背包)
样例输入:1 0 1 2 0 01 0 0 0 1 10 0 0 0 0 0样例输出:Collection #1:Can't be divided.Collection #2:Can be divided.题意:一开始给你6种物品的数量,每种物品的价值分别1~6,问你能否找到一种方案使得价值均分(不能将物品拆开)分析:这是一道多重背包问题,我们判断是否能将价值均分不就等价于能否找到一种情况使得物品价值和是总价值的一半吗?题目中又给了我们每种物品的数量,所以我们可..原创 2022-05-03 19:30:00 · 257 阅读 · 0 评论 -
(HDU1114)piggy banks(完全背包)
样例输入310 11021 130 5010 11021 150 301 6210 320 4样例输出:The minimum amount of money in the piggy-bank is 60.The minimum amount of money in the piggy-bank is 100.This is impossible.题意:给你一个存钱罐初始时的重量和装满钱后的重量,然后给你n种硬币,每种硬币有对应的价值和重量,数量...原创 2022-05-03 19:15:00 · 186 阅读 · 0 评论 -
(HDU-1024)Max Sum Plus Plus(动态规划)
输入样例:1 3 1 2 32 6 -1 4 -2 3 -2 3输出样例:68分析:给定n个数,让你从这n个数中选取m个不相交连续子段,求所有被选取的数的和的最大值跟这道题目非常类似:(ACWing4378)选取数对(动态规划)_AC__dream的博客-CSDN博客,建议大家先看一下我上面给出的这道题目的思路,当前题目跟上面这道题目不同的地方在于当前题目选取的区间长度是不固定的,所以我们就需要遍历上一段区间的右端点来更新答案。下面进行具体讲解:设f[i][j]表示..原创 2022-04-23 20:18:31 · 1878 阅读 · 0 评论 -
(第十三届蓝桥杯省赛)I:李白打酒加强版(动态规划)
输出答案对1e9+7取模样例输入5 10样例输出14分析:这是一道动态规划题,设f[i][j][k]表示走到了第i个位置,遇到了j个花,还剩k斗酒的合法方案数.初始化很简单就是f[0][0][2]=1,因为一开始酒的数量是2假如共遇到店n次,遇到花m次:那么答案就是f[n+m-1][m-1][1],这是很容易理解的,因为我们共需要遇到m次花且最后一次一定是花,则走到倒数第二个位置时一定已经遇到了m-1个花,且由于遇到花后酒的数量会减少1,所以走到倒数第二个位置时酒的数..原创 2022-04-10 08:43:22 · 5131 阅读 · 5 评论 -
(蓝桥杯第十三届省赛)G:积木画(动态规划)
读入一个n,问有多少种不同的方式,答案对1e9+7取模。分析:这道题是一个动态规划,设f[i][0]表示当前拼完了前i列的方案数,f[i][1]表示当前拼完了前i-1列,且第i列拼完了上面一个的方案数,f[i][2]表示当前拼完了前i-1列,且当前第i列拼完了下面一个的方案数。那么答案就是f[n][0]下面进行动态转移方程的推导:首先看f[i][0]可以由那些状态转移:假如我们当前要放这样的一种积木,那么显然是由f[i-1][0]递推过来的,那要是放这样的积木呢?,那就是由f[i-1][..原创 2022-04-09 19:33:59 · 2775 阅读 · 10 评论 -
(蓝桥杯第十一届决赛)试题D:本质上升序列(动态规划)
先把题目中的字符串给出来:tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl分析:虽然这只是一道填空题,但是我觉得这个还是有一定的思考意义的,所以我今天就..原创 2022-04-06 22:11:45 · 1619 阅读 · 0 评论 -
(HDU - 3709)Balanced Number(数位DP)
题目链接:Problem - 3709题意:给定区间[a,b],求区间内平衡数的个数。所谓平衡数即有一位做平衡点,左右两边数字的力矩相等。分析,这道题我们直接对平衡点进行枚举即可,然后分别求出来每个平衡点对应的平衡数求和,最后即为答案。需要注意的是前缀0的情况,对于000000000这样的答案我们实际上是不应该计入答案的,也就是说我们在数位DP的过程中需要考虑前导0,在pos=0最后返回的时候也要判断当前是否有前导0的存在,如果有前导0就直接返回0,否则返回当前平衡数左边和右边的力矩差与0判原创 2022-04-05 09:12:07 · 303 阅读 · 0 评论 -
算法设计第二次测试题
A - 数字三角形题目链接:22算法设计与分析-动态规划 - Virtual Judge分析:设f[i][j]表示到第i行第j个位置所能到达的最大值,可以自下往上更新也可以自上往下遍历,我在这里采用的是自下往上遍历的,一开始把f[n][i]=a[n][i],也就是把最底层的f数组赋初值,然后利用f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j]进行更新即可。最后结果就存在于f[1][1]中下面是代码:#include<cstdio>#incl原创 2022-04-03 18:35:07 · 1441 阅读 · 3 评论 -
(POJ-1276)Cash Machine(二进制优化+多重背包)
题目链接:1276 -- Cash Machine题意:先给你一个背包容量,然后给你n种物品每种物品的体积和数量,问最多能装的物品的体积是多少?多重背包经过二进制优化就相当于01背包,什么是二进制优化呢?就是说一种物品有m件,我们在多重背包问题求解过程中会依次遍历取多少件,这样复杂度有点高,而二进制优化就是说把2^s件物品当成一件物品来取,这样原来需要取2^s次现在只需要取一次,复杂度会大大降低,那这样做的正确性应该如何证明呢?我们假设最优答案中包含这种物品k件,然后我们把m分成若干个连续的原创 2022-04-02 09:34:48 · 602 阅读 · 0 评论 -
(POJ3280)Cheapest Palindrome(区间DP)
题目链接:3280 -- Cheapest Palindrome题意:给你一个字符串,然后给你每个字母添加或者删除所需要的代价,问你把原序列变成回文串的最小代价是多少?输入:第一行给出序列中含有的不同字母n和序列长度l接下来一行给出序列接下来n行分别给出每个字母添加或者删除所需要的最小代价分析:这是一道用区间DP来解决的题目,设f[i][j]表示将原序列中第i个字符到第j个字符变为回文序列的最小代价,那显然有f[i][i]=0,因为单个字符也算是回文串,关键是来看一下怎么进行动态转移.原创 2022-04-02 09:14:37 · 464 阅读 · 0 评论 -
回文子串(区间动态规划)
题目链接:22算法设计与分析-动态规划 - Virtual Judge分析:这道题目是一道比较简单的区间动态规划,但是有一个坑点卡了我挺长时间所以我想在这分析一下设f[i][j]表示从i到j的最长回文子串长度我一开始想的是当s[i]==s[j]时就有f[i][j]=f[i+1][j-1]+2,若s[i]!=s[j]则有f[i][j]=0,但是这样想是错误的,因为i~j是回文子串不仅需要s[i]==s[j],还需要i+1~j-1也是回文子串才行,所以说我们知道s[i]==s[j]时不能直接使f原创 2022-04-01 20:38:10 · 238 阅读 · 0 评论 -
(ACWing4378)选取数对(动态规划)
题目链接:4378. 选取数对 - AcWing题库分析:就是给你n个数,然后让你选k个区间,每个区间选m个数,问你所选的k个区间所有数的最大和是多少。这显然是一道动态规划题目,设f[i][j]表示考虑到第i个数且已经选了j个区间的所有数的最大和。然后我们每次考虑是否要选取当前数,如果选的话那么当前数就是我们所选取的第j个区间的右端点,那么这个时候f[i][j]=f[i-m][j-1],因为我们要是选当前数作为第j个区间的右端点,那么第j-1个区间中的数就要从i-m个数及之前开始选了。如果我们不原创 2022-03-23 16:01:21 · 152 阅读 · 0 评论 -
四边形不等式(优化区间DP技巧)
大家应该都知道一般我们在区间dp的更新中都需要三层循环来实现,第一层枚举区间长度,第二层枚举区间起始点,第三层就是枚举区间断点来寻求最优解,对于动态规划问题来说n^3的复杂度属实有点高,那我们能不能找到一些方法来优化一下呢?首先我们能够发现for循环的第一层和第二层肯定不能优化,前两层保证了对于任何区间都能够被更新,而第三层只是为了找最优解而设立的,如果我们能缩短第三层for循环的次数,那么肯定能对整个动态规划过程起到优化作用,而四边形不等式就是为了优化第三层for循环而产生的。先说一下什么样的区间..原创 2022-03-22 20:53:10 · 1951 阅读 · 1 评论 -
(L3-001)凑零钱(搜索或背包路径)
题目链接:PTA | 程序设计类实验辅助教学平台分析:这道题目一看就是动态规划,我写完之后过了样例但是就是通不过,于是我写了一个搜索想对拍一下,写完后想看看爆搜能过多少,结果……过了,才发现这道题暴力搜索也可以过(一会附上搜索代码)下面对这道题目进行分析:其实这道题目就是一个普通的背包问题,设f[i][j]=true/false表示能/不能用前i个硬币组成面额j。这样我们只需要最后判断f[n][m]是true还是false即可,那怎么保证硬币的字典序呢?其实这个很简单,由于字典序的规则我们可以知原创 2022-03-20 23:11:09 · 1414 阅读 · 0 评论 -
(P1052 [NOIP2005 提高组])过河(动态规划+裴蜀定理)
题目链接:[NOIP2005 提高组] 过河 - 洛谷分析:其实很容易想到的就是设f[i]表示跳到坐标为i的位置时所踩到的最少石子数,那么显然有f[i]=min(f[i-T~i-S])+vis[i],其中vis[i]标记坐标为i的位置是否有石子,但是当我们读完数据范围后发现这样是不行的,因为数据范围是1e9,显然会超时,但是发现石子数量不是很多,所以这个时候我们就需要从石子之间的距离这个角度来对本道题目来进行优化了。假设我们每次可以走s~t步,如果s==t,那么我们只有一种走的方式,那么这样原创 2022-03-19 13:55:54 · 601 阅读 · 0 评论 -
(P1273)有线电视网(树上背包)
题目链接:有线电视网 - 洛谷分析:这是一道树上背包问题,我们设f[i][j]表示以i为节点的子树中选j个终端的最大收益,这样我们最后的答案就是所有的满足f[1][i]>=0的i中的最大值。至于f数组怎么更新,这就是基本的树上背包更新方法了,不会的可以看这里:(P2014[CTSC1997])选课(树上背包)_AC__dream的博客-CSDN博客有一点需要注意的是f数组中第二维是终端数量,不能包括转播站,而且我们初始化时应该将所有的f[i][1]=w[i],i>n-m,也就是终原创 2022-03-18 20:43:51 · 32 阅读 · 0 评论 -
(ACWing313)花店橱窗(动态规划+路径输出)
题目链接:313. 花店橱窗 - AcWing题库输入样例:3 5 7 23 -5 -24 165 21 -4 10 23-21 5 -4 -20 20输出样例:532 4 5题意很明确,每一行需要取一个数,且这些数出现在不同列且行数小的数所在的列数也小。思路分析:令f[i][j]表示在1~j列中选取了i个数的合法方案的最大权值和,很显然j>=i,需要注意的一点是对于f[i][j]不一定选了第i行第j列的数,至于更新过程也比较容易,我们考虑f[i][.原创 2022-03-18 18:55:36 · 141 阅读 · 0 评论