动态规划-最长递增子序列
2018-02-27 22:33
155 查看
题目描述
这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。 给定一个序列A及它的长度n,请返回LIS的长度。
求解过程
给定一个数组A,以及他的长度N 生成长度为N的数组dp dp[i]的含义为:必须以A[i]结尾时的最长递增子序列的长度. 显然 dp[0]=1; 对于i 为1-N-1时, dp[i]为比A[i]小的数结尾的最长的子序列的长度+1 状态转移方程为 dp[i] = max{dp[j]+1|0<=j<i,A[j]<A[i]};
代码实现
class LongestIncreasingSubsequence { public: int getLIS(vector<int> A, int n) { if(!n) return 0; int *dp = new int ; dp[0]=1; int maxlongs = 1; for (int i=1; i<n; ++i) { int maxlen = 0; for (int j=i-1; j>=0; --j) { if(A[j]<A[i]) maxlen = max(maxlen,dp[j]); } dp[i] = maxlen +1; maxlongs = max(dp[i],maxlongs); } return maxlongs; } };
相关文章推荐
- 动态规划系列之最长递增子序列问题解答
- 【C++】动态规划:最长递增子序列和建桥问题
- 动态规划——最长递增子序列和最长公共子序列
- 动态规划-最长递增子序列
- [算法]动态规划之最长递增子序列
- 动态规划--最长递增子序列
- 求数组中最长递增子序列 动态规划
- 动态规划——最长递增子序列
- 求数组中最长递增子序列—动态规划入门(编程之美)
- 最长递增子序列的求解--动态规划求解
- 最长递增子序列问题---动态规划
- 最长递增子序列的求解(O(n*n),O(nlogn))——动态规划
- 动态规划求解01背包问题,最长递增子序列
- 机试算法讲解: 第49题 动态规划之最长递增子序列问题
- (动态规划)最长递增子序列
- 动态规划系列【2】最长递增子序列LIS
- 动态规划_最长递增子序列
- 动态规划 最长递增子序列
- [置顶] 【动态规划】最长递增子序列
- 【动态规划】 最长递增子序列