LeetCode300 最长上升子序列
2018-03-22 18:34
309 查看
/*! * @file 最长上升子序列.cpp * @Date: 2018/03/22 17:22 * @author: sicaolong * @Contact: sicaolong@163.com * @brief: 思路: 1、memo的状态变换;number[i]与number[j]的大小关系; number[i]>number[j] memo[i]=max(1+memo[j],memo[i]);求出m每个位置的LIS 2、循环遍历找出memo中的最大值; * @TODO: */ #include<iostream> #include <vector> using namespace std; int get_length_of_LIS_DP(vector<int>&numbers); int max(int a, int b) { return a > b ? a : b; } //=========main函数 int main() { vector<int >numbers = { 10, 9, 2, 5, 3, 7, 101, 18 }; int length=get_length_of_LIS_DP(numbers); cout<<length<<endl; } int get_length_of_LIS_DP(vector<int>&numbers)//时间复杂度为o(n*n); { if (numbers.size() == 0) return 0; vector<int>best(numbers.size(), 1); //memo[i]表示以number[i]为结尾的LIB的长度; for (int i = 0; i < numbers.size();++i) for (int j = 0; j < i;j++) if (numbers[j] < numbers[i])//考察numbers[j]是不是在numbers[i]的后面 best[i] = max(best[i], 1 + best[j]);//更新memo[i]的值;求出每个位置的LIS int result = 1; for (int i = 0; i < numbers.size(); i++)//循环遍历,找出最大的结果;并返回到result中 result = max(result, best[i]); return result; }
相关文章推荐
- Leetcode 300. 最长上升子序列
- Leetcod-300_最长上升子序列LIS-基础动态规划问题-【C++】
- (Java) LeetCode 300. Longest Increasing Subsequence —— 最长上升子序列
- 【LeetCode 300 Longest Increasing Subsequence】最长递增子序列
- Leetcode 300 Longest Increasing Subsequence 最长递增子序列
- leetcode(300)—— Longest Increasing Subsequence(最长递增子序列)
- POJ2533 -Longest Ordered Subsequence最长上升子序列-动规和nlogn二分算法详解
- sdut1299 最长上升子序列(dp入门)
- hdu 1025 Constructing Roads In JGShining's Kingdom 深夜又一波DP,最长上升子序列(O(nlogn)算法)!尼玛坑爹的输出啊!!
- 最长上升子序列nlogn算法
- CDOJ-----最长上升子序列
- 动态规划之最长上升子序列(LIS模板)再整理
- POJ 3903 —— Stock Exchange 最长上升子序列
- hdu5532 Almost Sorted Array--最长上升子序列
- 最长上升子序列
- [CODEVS2185]最长公共上升子序列(dp)
- 3:拦截导弹(最长上升子序列)
- 单调队列优化的最长上升子序列
- HDU 3998 Sequence (最长上升子序列+最大流)
- ACdream 1216Beautiful People(二重最长上升子序列)