随笔分类 - 动态规划——区间DP
摘要:"题目" 题意 给出两个字符串 s1,s2,每次操作可以使一段连续的子串全变成一个字母,问最少多少次操作可以使 s1 变为 s2. 例如 zzzzzfzzzzz,长度为 11 ,我们就将下标看做 1 11 先将 111 刷一次,变成 $ aa
阅读全文
摘要:题意 类似于涂色问题,环形问题不多说,断环加倍即可,限制条件if判断就行。 解析 代码 cpp include using namespace std; int n,c,p,a[410]; int f[410][410],ans=1
阅读全文
摘要:题意 sb题目,不多说,爆搜就能过。 代码 cpp include using namespace std; int n,m,ans=10){ ans=min(ans,data); return; } } if(x+1
阅读全文
摘要:题意 在一个凹槽中放置了N层砖块,最上面的一层油N块砖,从上到下每层一次减少一块砖。每块砖都有一个分值,敲掉这块砖就能得到相应的分值,如图所示。 如果你想敲掉第i层的第j块砖的话,若i=1,你可以直接敲掉它;若i 1,则你必须先敲掉第i 1层的第j和第j+1块砖。 你现在可以敲掉最多M块砖,求得分最
阅读全文
摘要:共t条街对于每一条街上有n个店铺(n可能不相同),每次只能选两端第一个营业的店铺采购,采购第i个店铺会获得幸福度ai,采购完后,这个店铺和它相邻的店铺便会关门,问最大幸福度? 考场想了一下dp,一开始想一维但发现不好处理,二维参数也没有想出来,于是便开始了我的暴力瞎搞之旅,我随手写了几个例子发现对于
阅读全文
摘要:题意 1到n个自然数中选k个自然数要求两两不相邻,问有多少种方法,模m eg(1 3 5 ) 又是一道打表规律题,正常解法dp可以通过前缀和优化到O(N K)。另外我们可以重新定义F[I,J]表示从1到I中选择J个不连续数的方案数。通过考虑I选还是不选来进行状态转移。 1.如果不选I:则方案数为F[
阅读全文
摘要:一道经典的dp题 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 我们先看下这道题的简单版本 有N堆石子排成一排,每堆石子有一定的数
阅读全文
摘要:题意 t组数据,每组数据有n个方块,给出它们的颜色,每次消去的得分为相同颜色块个数的平方(要求连续),求最大得分。 首先看到这题我们发现我们要把大块尽可能放在一起才会有最大收益,我们要将相同颜色块合在一起,我们可以分区间进行处理,便可用区间dp解决,我们尝试合并区间我们定义状态f[i][j]表示合并
阅读全文
摘要:题面给两个序列a,b长度分别为n,m求最长公共上升子序列,百度了一下求公共子序列的问题好像叫做LCS,而上升的叫做LCIS。都是dp的例题。 先来说说最长公共子序列,这是一道比较经典的dp题,我们可以很容易写出 1.状态F[i][j]表示a序列匹配到第i个b序列匹配到第j个的最长长度 2.状态转移方
阅读全文