模型应用:可以将问题中的不规则序列进行映射,使之成为一个递增的有序序列,然后可以套用模型
#include<cstdio>
#include<vector>
using namespace std;
int LIS(vector<int>& input){
vector<int> dp;//dp[i]:以input[i]结尾的最长不下降子序列长度
int maxlength=-1;
for(int i=0;i<input.size();i++){
dp.push_back(1); //dp[i]=1;//先假设每个单个元素自成一个序列
for(int j=0;j<i;j++){
if(input[j]<=input[i]&&dp[j]+1>dp[i]){//往前寻找一个与末元素拼接后序列长边长的子序列
dp[i]=dp[j]+1;
}
}
if(dp[i]>maxlength)
maxlength=dp[i];
}
return maxlength;
}