求一个序列的最长递增子序列,这样的子序列是允许中间越过一些字符的,即留“空”。
例如:4 2 3 1 5 的最长递增子序列为 2 3 5,长度为 3 。
参考大神的思路,动态规划以i为结尾的最长递增子序列长度,最后找个最大值
参考链接:https://blog.csdn.net/qq_41765114/article/details/88415541
C++代码实现:
#include <iostream>
using namespace std;
int main(){
int n;
cin >> n;
int arr[100];
for(int i = 0;i < n;i++)
cin >> arr[i];
int dp[100] = {1};
int high = 1;
// dp[0] = 1;
// if(dp[1] > dp[0])
// dp[1] = 2;
// else if(dp[1] <= dp[0])
// dp[1] = 1;
int temp = 1;
for(int i = 1;i < n;i++)
{
for(int j = i-1;j >= 0;j--)
{
if(arr[j] < arr[i])
temp = 1+dp[j];
dp[i] = max(temp,dp[i]);
// high = max(high,dp[i]);
// cout << dp[i];
}
// cout << " ";
high = max(high,dp[i]);
}
cout << high << endl;
return 0;
}