最长连续递增子序列长度和最长不连续递增子序列长度
1.最长连续递增子序列
例如:Array[6] = {1,5,2,4,3,8}
其最长连续递增子序列就2,4或3,8,最长长度为2
设数组dp[i],表示以i为结尾的最长连续子序列长度,即上述数组的dp数组即为
dp[6] = {1,1,1,2,1,2}
代码如下
#include<iostream>
using namespace std;
int main(){
int Array[6] = {1,5,2,4,3,8};
int dp[6];
dp[0] = 1;
for(int i=1;i<6;i++){
dp[i] = 1;
if(Array[i] > Array[i-1]){
dp[i] = dp[i-1] + 1;
}
}
for(int i=0;i<6;i++)
cout<<dp[i]<<" ";
}
2.最长不连续递增子序列
例如:Array[6] = {1,5,2,4,3,8}
其最长连续递增子序列就1,2,418或1,2,3,8,最长长度为4
设数组dp[i],表示以i为结尾的最长不连续子序列长度,即上述数组的dp数组即为
dp[6] = {1,2,2,3,3,4}
代码如下
#include<iostream>
using namespace std;
int main(){
int Array[10] = {1,5,2,4,3,8,7,2,9,10};
int dp[10];
dp[0]=1;
for(int i=1;i<10;i++){
dp[i] = 1;
for(int j=i-1;j>=0;j--){
if(Array[i]>Array[j]){
dp[i] = max(dp[i],dp[j]+1);
}
}
}
for(int i=0;i<10;i++)
cout<<dp[i]<<" ";
}