给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子 ...
分类:
其他好文 时间:
2019-03-09 15:30:31
阅读次数:
211
LCS--Longest Common Subsequence,即最长公共子序列,一般使用DP来解。 常规方法: dp[i][j]表示字符串s1前i个字符组成的字符串与s2前j个字符组成的字符串的LCS的长度,则当s1[i-1]==s2[j-1]时,dp[i][j]=dp[i-1][j-1],否则d ...
分类:
其他好文 时间:
2019-02-24 01:01:14
阅读次数:
194
注:博客的不少思想是从算法竞赛进阶指南上选取的。 线性动态规划是指具有“阶段”划分的动态规划算法。动态规划算法的状态包括多个维度,但在每个维度上都具有“线性”变化的阶段,那么也可以叫作线性动态规划。 首先还是说几个固有的模型。 lis问题:算法竞赛进阶指南给出的表示是这样。 状态表示:f[i]表示以 ...
分类:
其他好文 时间:
2018-12-31 13:48:55
阅读次数:
261
一、最长公共子序列介绍 一个序列的子序列是在该序列中删去若干元素后得到的序列。例如:“ABCD”和“BDF”都是“ABCDEFG”的子序列。 最长公共子序列(Longest Common Subsequence,简写LCS)问题:给定两个序列X和Y,求X和Y长度最大的公共子序列。例如:X=“ABBC ...
分类:
其他好文 时间:
2018-10-09 18:11:30
阅读次数:
213
由于动态规划的LCS问题,需要从第一个字符开始读取比较方便。所以用gets_s();第一个参数是起始位置,第二个参数是字读取字符的长度。 ...
分类:
其他好文 时间:
2018-09-02 23:49:10
阅读次数:
232
一,问题描述 给定一个序列,求解它的最长 递增 子序列 的长度。比如: arr[] = {3,1,4,1,5,9,2,6,5} 的最长递增子序列长度为4。即为:1,4,5,9 二,算法分析 有两种方式来求解,一种是转化为LCS问题。即,首先对数组排序,将排序后的结果存储在辅助数组中。排序时间复杂度O ...
分类:
其他好文 时间:
2018-08-31 21:21:35
阅读次数:
153
开始,我先完整的分析一个动态规划问题,叫做钢条切割问题,这个问题从递归开始导入,然后引入带备忘录的自顶向下方法,最后得到动态规划的解法。所有的问题都可以遵循这样的解决方法。然后开始分析如何用递归求解动态规划问题,最后分析如何使用动态规划的解法。 钢条切割问题: 问题描述,给定一个数组,表示的是出售长 ...
分类:
其他好文 时间:
2018-07-14 21:34:42
阅读次数:
184
问题介绍 给定一个序列$X=$,另一个序列$Z=$满足如下条件时称为X的 子序列 :存在一个严格递增的X的下标序列$$,对所有的$j=1,2,...,k$满足$x_{i_j}=z_j.$ 给定两个序列$X$和$Y$,如果$Z$同时是$X$和$Y$的子序 ...
分类:
其他好文 时间:
2018-06-12 16:13:02
阅读次数:
229
o(n^2)解法就不赘述了,直接解释o(nlogn)解法 LIS最长递增子序列; 先明确一个结论:在长度最大为len的递增序列里若末尾元素越小,该递增序列越容易和后面的子序列构造出一个更长的递增子序列。也即认为,长度为len的递增子序列中末尾元素最小的那种最需要保留。我们不妨称这个目前找到序列为到目 ...
分类:
其他好文 时间:
2018-05-10 23:33:18
阅读次数:
223
可以发现只有当两个序列中都没有重复元素时(1~n的排列)此种优化才是高效的,不然可能很不稳定。 求a[] 与b[]中的LCS 通过记录lis[i]表示a[i]在b[]中的位置,将LCS问题转化为最长上升子序列问题,转化方法如下: for(int i=1;i include include inclu ...
分类:
其他好文 时间:
2017-11-20 23:09:11
阅读次数:
199