1、最长公共子序列:(x和y是两个数组的长度)f(x,y) = 0 if(x==0 || y==0) f(x-1,y-1)+1 if(A[x-1]==B[y-1]) max{f(x-1,y), f(x,y-1)} if(A[x-1]!=B...
分类:
其他好文 时间:
2015-02-24 17:25:49
阅读次数:
210
有两个字符串S1和S2,求一个最长公共子串,即求字符串S3,它们同时是S1和S2的子串,且要求它们的长度最长,并确定这个长度。这个问题我们称之为最长公共子序列问题。
与求最长递增子序列一样,我们首先将原问题分割成一些子问题,我们用dp[i][j]表示S1中前i个字符和S2中前j个字符分别组成的两个前缀字符串的最长公共子串长度。显然的,当i,j较小时我们可以直接给出答案,如dp...
分类:
编程语言 时间:
2015-02-12 16:22:43
阅读次数:
178
最长递增子序列——解题报告
题目描述:给定一个数组,长度为n,求出其中最长递增子序列。
分析:这题可以用动态规划求解,遍历i = 1 : n,当第i个数比前面j数大,而且前面的子序列长度加1之后,比现在的第i个子序列长的话,那么就变换。额,晦涩难懂额。。看代码可以好一些。
代码如下:
#include
using namespace std;
...
分类:
其他好文 时间:
2015-02-04 13:06:17
阅读次数:
144
题目:《编程之美》 P194
写一个时间复杂度尽可能低的程序,求一个数组(length个元素)中最长递增子序列的长度。
注意,本题认为最长递增子序列可以有相等的元素,如 (1,2,2,3,3,4,5,6)。...
分类:
编程语言 时间:
2015-02-03 15:09:03
阅读次数:
158
题目:
求一个一维数组(N个元素)中最长递增子序列的长度
DP题
代码如下:
#include
using namespace std;
const int MAXN = 100000;
const int INF = 10000000;
int minV[MAXN], lis[MAXN], Array[MAXN];
int n;
//lis[i]表示从第i个元素开...
分类:
编程语言 时间:
2015-01-25 18:18:01
阅读次数:
168
对于动态规划问题,往往存在递推解决方法,这个问题也不例外。要求长度为i的序列的Ai{a1,a2,……,ai}最长递增子序列,需要先求出序列Ai-1{a1,a2,……,ai-1}中以各元素(a1,a2,……,ai-1)作为最大元素的最长递增序列,然后把所有这些递增序列与ai比较,如果某个长度为m序列的末尾元素aj(j<i)比ai要小,则将元素ai加入这个递增子序列,得到一个新的长度为m+1的新序列,...
分类:
其他好文 时间:
2015-01-20 15:55:42
阅读次数:
140
最近在做单调队列,发现了最长上升子序列O(nlogn)的求法也有利用单调队列的思想。 最长递增子序列问题:在一列数中寻找一些数,这些数满足:任意两个数a[i]和a[j],若id[len],则直接加入到d的末尾,且len++;(利用性质2) 否则,在d中二分查找,找到第一个比x小的数d[k],并d[k...
分类:
其他好文 时间:
2015-01-17 19:29:38
阅读次数:
204
题意: 一个序列可能有多个最长子序列,现在问每个元素是以下三个种类的哪一类:1.不属于任何一个最长子序列2.属于其中某些但不是全部最长子序列3.属于全部最长子序列解法: 我们先求出dp1[i]表示1~i 的最长递增子序列长度, dp2[i]表示 n~i 的最长递减子序列长度(严格增减),这里我们可以...
分类:
编程语言 时间:
2015-01-16 22:12:22
阅读次数:
212
题目描述Description给定正整数序列x1,..... , xn 。(1)计算其最长递增子序列的长度s。(2)计算从给定的序列中最多可取出多少个长度为s的递增子序列。(3)如果允许在取出的序列中多次使用x1和xn,则从给定序列中最多可取出多少个长度为s的递增子序列。输入描述Input Desc...
分类:
其他好文 时间:
2014-12-28 12:56:17
阅读次数:
183
解题思路:给出一列数{an},求其最长递增子序列的长度max从特殊到一般来做,当给出的数列{an}是单调递增数列时,max=n;所以当{an}乱序时,maxint a[1010],b[1010],dp[1010][1010];void bubblesort(int a[],int n){ int i...
分类:
其他好文 时间:
2014-12-20 14:08:36
阅读次数:
205