动态规划思想,O(n2)算法。
这个是求最长公共上升子序列的基础。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int f[1007][1007];
int a[1007],b[1007];
int main()
{
int a1,b1;
cin>>a1>>b1;
for(int i=1;i<=a1;i++)
{
cin>>a[i];
}
for(int i=1;i<=b1;i++)
{
cin>>b[i];
}
for(int i=1;i<=a1;i++)
{
for(int j=1;j<=b1;j++)
{
if(a[i]==b[j])
{
f[i][j]=f[i-1][j-1]+1;
}
else
{
f[i][j]=max(f[i-1][j],f[i][j-1]);
}
}
}
cout<<f[a1][b1];
return 0;
}