如何求最长不降子序列(下面这段代码,找段数据模拟一下)
dp[i] : 即以i号元素结尾的不降子序列,最长的长度‘
book[i]=j : 即i号颜色在序列中的下标为j
for(int i=0;i<cnt;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(book[a[i]]>=book[a[j]])
dp[i]=max(dp[i],dp[j]+1);
}
if(maxn<dp[i]) maxn=dp[i];
}
完整代码
#include<iostream>
using namespace std;
int main()
{
int n,m,k,temp,cnt=0,maxn=0,book[205]={},a[10005],dp[10005];
cin>>n>>m;
for(int i=1;i<=m;i++)
cin>>temp,book[temp]=i;
cin>>k;
for(int i=0;i<k;i++){
cin>>temp;
if(book[temp]!=0)
a[cnt++]=temp;
}
for(int i=0;i<cnt;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(book[a[i]]>=book[a[j]])
dp[i]=max(dp[i],dp[j]+1);
}
if(maxn<dp[i]) maxn=dp[i];
}
cout<<maxn;
return 0;
}