![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
Ghostkkkk
这个作者很懒,什么都没留下…
展开
-
湖南师范大学2018年大学生程序设计竞赛新生赛—I.巨巨的提问 括号匹配DP
给你一些左右括号,每次你可以选择一段区间将这段区间括号左变右,右变左,问最少几次可以使得整个括号序列合法。 题解:要使得括号序列合法,则充要条件为每个位置,前面的净左括号(左括号个数-右括号个数)都要>=0,且最后的位置时,净左括号个数为0。所以我们先定义d[i][j]表示当前下标为i,j为当前净左括号个数。然而要表示翻转,我们加一维表示当前这位有没有翻转即可。所以最终状...原创 2018-06-06 17:24:56 · 335 阅读 · 0 评论 -
CF 932G - Palindrome Partition 回文树 技巧 DP
题意:给你一个字符串,问有多少种划分,使得如果划分后有k个部分,则sub[i] = sub[k - i + 1],s[i]是第i个部分代表的串,k必须是偶数。题解:普通的回文串是s[1]对应s[n],s[2]对应s[n - 1].....这里有不同,是s[1] 对应 s[n - j], s[2]对应s[n - j + 1],注意到现在对应关系是双方下标都在递增,而普通回文串是第一个下标...原创 2018-09-19 15:12:18 · 277 阅读 · 0 评论 -
CF 903F - Clear The Matrix 状态压缩DP
题意:给你一个4 * n的矩阵,每个格子要么是*要么是.。现在要把所有的*变成.,每次可以用1*1,2*2,3*3,4*4的矩阵覆盖所有的*使他们变成.。这四种矩阵各有花费,问最小花费。题解:状态压缩DP。设d[i][j]表示当前在第i列, 第i, i + 1, i + 2, i + 3的状态,为*表示1,为.表示0。有两种转移, 一种是在第i列,用以第i列开始的矩阵覆盖,还有...原创 2018-09-14 23:56:18 · 227 阅读 · 0 评论 -
CF 1051E - Vasya and Big Integers 扩展KMP DP
题意:给你一个由数字构成的字符串,问你有多少种划分方式,使得每段不含前导0,并且每段的数字大小在[l, r]之间。题解:很明显的DP。dp[i]为下标为i时的划分数,设ll为以i+1开始,最小的大于l的位置, rr为以i+1开始,最大的小于r的位置,那么dp[ll], dp[ll + 1]......dp[rr]都要+d[i],用前缀和或者线段树都行。关键在与怎么求ll, ...原创 2018-10-02 15:27:39 · 459 阅读 · 0 评论 -
CF 808G - Anthem of Berland AC自动机或KMP DP
题意:给你一个带?的字符串S,和一个字符串T,问把?替换后最多能匹配多少次T?可以重叠匹配。题解:这种肯定是要DP的。怎么DP呢?AC自动机上的DP问题很多,这个也可以用AC自动机。dp[i][j]表示当前在S串的i位置,在AC自动机的j状态时能完整匹配T的次数。 当i是问号时枚举26个字母转移,不是问号直接转移到这个字符。滚动数组一下即可。当然KMP也是可以的...原创 2018-09-22 20:59:48 · 346 阅读 · 0 评论 -
Gym - 101611B Byteland Trip DP
题意:给你一个序列,只包含>和<。>代表这个点可以前往任何下标大于他的点,<代表这个点可以前往任何下标小于他的点。对每个下标i,问有多少种方式使得经过每个点一次,最后结束在i处。题解:由于这个题又可以由左边,又可以由右边到达,所以普通的DP方式不行。改变思路,设d1[i][j]代表前i个点时,有j个联通块,并且联通块都指向右的方案数。d2[i][...原创 2018-10-13 21:33:32 · 325 阅读 · 0 评论 -
牛客国庆集训派对Day6 - F kindom DP
链接:https://www.nowcoder.com/acm/contest/206/F来源:牛客网 题目描述X王国有n位官员,编号从1到n。国王是1号官员。除了国王以外,每个官员都有一个上司。我们称这个官员是这个上司的下属。上司的编号总比下属小。我们定义一个官员的影响力为他所有下属的影响力之和再加1。例如,一个没有下属的官员的影响力是1。国王的影响力总是n。任何一位有下属的官员...原创 2018-10-08 17:58:39 · 148 阅读 · 0 评论 -
SenseTime Ace Coder Challenge 暨 商汤在线编程挑战赛 A.双人取数
https://nanti.jisuanke.com/t/26015有一款双人游戏,游戏的地图是一张 n \times mn×m的平面,其中玩家 A 从地图的左上角出发,通过向右和向下走的方式走到右下角,玩家 B 从右上角出发,通过向左和向下的方式走到左下角(每次只能走到上下左右相邻的至多四个格子)。每个格子有一个分数,玩家走到格子上就会获得这个分数,当一个玩家得到这个分数后,格子的分数就...原创 2018-10-18 17:11:13 · 191 阅读 · 0 评论 -
CF 960F - Pathwalks 线段树动态开点优化DP
http://codeforces.com/problemset/problem/960/F题意:略。题解:每个点一个线段树,来优化DP。用线段树动态开点。然而这里学到了一个技巧:用map数组模拟二维数组,达到动态开点的效果,然后用树状数组求1-n最大值即可。复杂度,也可以用unordered_map加速。代码:#include <bits/stdc++...原创 2018-10-16 15:11:44 · 187 阅读 · 0 评论 -
CF 294E - Shaass the Great 树形DP 推式子
题意:给你一颗带权无向树,你可以改变一条边的位置,使得改变后任意两点仍然可达,问改变后任意两点路径的和的最小值是多少?题解:随便推一推就可以了,思路很简单,只是推的时候一堆bug。枚举改变的边,然后删掉这条边,会构成两个联通块,找到每个联通块中与其他点距离和最小的点,然后那条边连这两个点即可。代码:#include <cstdio>#include <...原创 2018-09-13 21:10:47 · 119 阅读 · 0 评论 -
CF 990F - Flow Control 生成树 思维
题意:给你一个n个点m条边的图,你可以设置每条边的流量,现在要求每个点都得到s[i]的流量,问方案?题解:初看,没法做。肯定是要转换了,我们发现,原图是个连通图,那么我们缩一下边,缩成一棵树还是联通的,可以猜测这样是等价的。实际上是可以证明的,假如原图有一条边连着u, v,流量是c,那么在生成树上,我们可以等价成把u 到v的路径上的流量加c即可。现在变成了树,题目就好做多了...原创 2018-09-18 15:38:40 · 204 阅读 · 0 评论 -
CF 946G - Almost Increasing Array 技巧 LIS DP
题意:给你一个数组,问最多改变多少个数字,可以使他变成“几乎上升”,“几乎上升”的意思是最多删掉一个数后数组严格上升。题解:如果没有删除,假如不是严格上升,我们可以用n - LIS(LIS的意思是最长不下降子序列)。是严格上升,我们先把a[i] - i,然后再n - LIS。现在的问题在于删除一个数后怎么办呢?本来求LIS是用dp记录长度为i的结尾的最小值,现在加一...原创 2018-09-17 15:51:53 · 176 阅读 · 0 评论 -
牛客网暑期ACM多校训练营(第八场)H——Playing games FWT优化dp
链接:https://www.nowcoder.com/acm/contest/146/H来源:牛客网 题目描述Niuniu likes playing games. He has n piles of stones. The i-th pile has ai stones. He wants to play with his good friend, UinUin. Niuniu c...原创 2018-08-14 20:17:39 · 374 阅读 · 0 评论 -
HDU - 6357 Hills And Valleys DP 最长上升子序列
Problem DescriptionTauren has an integer sequence A of length n (1-based). He wants you to invert an interval [l,r] (1≤l≤r≤n) of A (i.e. replace Al,Al+1,⋯,Ar with Ar,Ar−1,⋯,Al) to maximize the lengt...原创 2018-08-14 20:44:17 · 124 阅读 · 0 评论 -
935E - Fafa and Ancient Mathematics 表达式树 树形DP
题意给你一个表达式,只包含括号,数字,加号和减号。现在把所有加号和减号删去,问你在这些位置填加减号之后表达式的值最大是多少。min(加号数量,减号数量) <= 100字符串长度 <= 10000题解建一个表达式树,然后在树上进行DP。表达树上每个节点都是一个表达式,可以用栈来建立。mx[i][j], mi[i][j] 表示i号节点用了j个数量少的符...原创 2018-08-23 20:47:00 · 223 阅读 · 0 评论 -
939F - Cutlet DP 线段树优化
题意有一块烤肉,每面都需要烤正好n秒钟。现在给k个区间,你可以在这些区间内翻转烤肉。求最少的翻转次数。k<=100.n<=1e5题解首先要知道,在同一个区间内,不可能翻转超过两次, 如果翻转超过两次,可以用两次以内来代替。我们定义dp[i][j]表示在第i个区间完成后,当前未烤的那面烤了j分钟。为什么不定义正在烤的那面烤了j分钟呢?因为前者结果可以轻...原创 2018-08-23 21:05:38 · 159 阅读 · 0 评论 -
CF 908D New Year and Arbitrary Arrangement 期望DP
Let dp[i][j] be the expected answer given that there are i subsequences of the form ‘a’ in the prefix and j subsequences of the form ‘ab’ in the prefix.Then, we have something like dp[i][j] = (pa * ...原创 2018-08-21 16:29:06 · 195 阅读 · 0 评论 -
ZOJ - 3329 One Person Game 概率DP 数学消环
题意有三个色子,每个色子有ki面,分别代表1-ki。每次你丢三个色子,如果分别摇到a, b, c,则积分器归零, 否则积分器加a+b+c。积分器大于n时游戏结束。问期望丢的次数。题解设d[i] 为当前积分器为i时距离游戏结束还需要丢的期望次数。d[i] = + d[0] * p[0] + 1.p[i]为摇到的和为i的概率。显然dp方程有环。即dp[i]既由...原创 2018-08-21 22:00:13 · 124 阅读 · 0 评论 -
CF 938F Erasing Substrings DP 贪心
题意:给你一个字符串S,你需要执行次操作,每次删除一个长度为2^(i-1)的子串。问最后字典序最小是多少。题解:最后一定剩余|S| - 2^k + 1长度的串,从前往后考虑,我们对当前的字符,一定要越小越好。这样我们可以定义一个状态dp[i][j]表示当前删除了j个字符,还剩下i个字符的最小字符串。但是我们发现没有必要这么做,因为当前如果不是长度为i的最优的串,那么就没用了。...原创 2018-09-07 23:51:56 · 298 阅读 · 0 评论 -
CF 1029E Tree with Small Distances 树形DP or 贪心
题意:给你一颗树,问你要使1号节点到所有节点的距离不超过2,最少添加多少边?题解:显然添加的边肯定连1好。利用树形DP。我们设dp[i][j]为i号节点到1的距离为j,并且i号节点的子树都满足要求的最少边数。这样dp[n][2]即可,dp[i][1] = (i == 1 || par == 1 ? 0 : 1)但是dp[i][2]有两种情况,一种是i节点经过父亲再到...原创 2018-09-05 20:16:54 · 181 阅读 · 0 评论 -
Wannafly挑战赛26 F.msc的棋盘 计数DP 最小割转换
链接:https://www.nowcoder.com/acm/contest/212/F来源:牛客网 题目描述一天,msc在家里找到了一个n×m的棋盘。这个棋盘十分奇特,每个格子最多放一个棋子,但是你并不能看见具体的棋子都放在了哪些地方,但是有一个显示屏可以显示每一行每一列有多少棋子。然而遗憾的是,由于棋盘已经放了很久,现在显示每一行有多少棋子的部分已经坏掉了,所以msc只能...原创 2018-10-17 20:20:31 · 235 阅读 · 0 评论