![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
DP
DP问题
SumFunction
这个作者很懒,什么都没留下…
展开
-
线性DP 最短编辑距离
给定两个字符串A和B,现在要将A经过若干操作变为B,可进行的操作有: 删除–将字符串A中的某个字符删除。 插入–在字符串A的某个位置插入某个字符。 替换–将字符串A中的某个字符替换为另一个字符。 现在请你求出,将A变为B至少需要进行多少次操作。 输入格式 第一行包含整数n,表示字符串A的长度。 第二行包含一个长度为n的字符串A。 第三行包含整数m,表示字符串B的长度。 第四行包含一个长度为m的字符串B。 字符串中均只包含大写字母。 输出格式 输出一个整数,表示最少操作次数。 数据范围 1≤n,m≤1000原创 2021-03-12 19:32:14 · 121 阅读 · 0 评论 -
线性DP 最长公共子序列
给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。 输入格式 第一行包含两个整数N和M。 第二行包含一个长度为N的字符串,表示字符串A。 第三行包含一个长度为M的字符串,表示字符串B。 字符串均由小写字母构成。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N,M≤1000 输入样例: 4 5 acbd abedc 输出样例: 3 DP分析 线性DP问题 首先考虑集合 f(i,j)表示A串区间(1,i) B串区间(1,j)的所有最长公共子序列集合 该.原创 2021-03-10 00:41:55 · 183 阅读 · 0 评论 -
线性DP 最长上升子序列I
给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。 输入格式 第一行包含整数N。 第二行包含N个整数,表示完整序列。 输出格式 输出一个整数,表示最大长度。 数据范围 1≤N≤1000, −109≤数列中的数≤109 输入样例: 7 3 1 2 1 8 5 6 输出样例: 4 说明:对于样例的最长上升子序列为1 2 5 6 DP思路 这是一道线性DP问题 我们定义集合f(i)表示以第i个数结尾的数的所有上升子序列 其f(i)属性可以表示为以第i个数结尾的所有上升子序列的最大长度 则状态转原创 2021-03-09 23:50:12 · 111 阅读 · 0 评论 -
环形区间DP 环形石子合并
题目描述 在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。 试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. 输入输出格式 输入格式: 数据的第1行试正整数N,1≤N≤100,表示有N堆石子.第2行有N个数,分别表示每堆石子的个数. 输出格式: 输出共2行,第1行为最小得分,第2行为最大得分. 输入输出样例 输入样例#1: 4 4 5 9 4 输出样例#1: 43 54 环形区间DP思路 相比原创 2021-03-07 16:43:04 · 168 阅读 · 0 评论 -
区间DP 石子合并
设有N堆石子排成一排,其编号为1,2,3,…,N。 每堆石子有一定的质量,可以用一个整数来描述,现在要将这N堆石子合并成为一堆。 每次只能合并相邻的两堆,合并的代价为这两堆石子的质量之和,合并后与这两堆石子相邻的石子将和新堆相邻,合并时由于选择的顺序不同,合并的总代价也不相同。 例如有4堆石子分别为 1 3 5 2, 我们可以先合并1、2堆,代价为4,得到4 5 2, 又合并 1,2堆,代价为9,得到9 2 ,再合并得到11,总代价为4+9+11=24; 如果第二步是先合并2,3堆,则代价为7,得到4 7,原创 2021-03-07 15:52:28 · 105 阅读 · 0 评论