**问题:**最长递增子序列问题主要分为了两类,即最长连续递增子序列的求解,以及最长递增子序列的求解(不一定要连续)。求解过程总结如下:
算法标签:动态规划、深度优先搜索、二分查找
代码:01_dp求解最长连续递增子序列长度
#include<iostream>
#include<algorithm>
using namespace std;
const int maxN = 1e5+9;
int dp[maxN]; // dp[i]表示以第i个元素作为最后元素的最长连续递增子序列的的长度
int res = -1;
int main(){
int n;
int arr[maxN];
cin >> n;
for( int i=1; i<=n; i++ ){
cin >> arr[i];
}
dp[1] = 1;
for( int i=2; i<=n; i++ ){
if(arr[i] > arr[i-1]){
dp[i] = dp[i-1] + 1;
}else{
dp[i] = 1

本文介绍了最长递增子序列问题的多种解决方法,包括最长连续递增子序列及最长递增子序列(不连续)的求解。通过动态规划、深度优先搜索等算法实现,并提供了四种不同效率的代码实现,帮助读者理解并掌握该问题的解决思路。
最低0.47元/天 解锁文章
780

被折叠的 条评论
为什么被折叠?



