我们学过了LCS,LIS,现在呢我们复习一下LCIS,也就是最长公共上升子序列。
dp[j]等于b[]数组到j位置的时候与a[]数组组成的最优解。
int a[MAX];
int b[MAX];
int dp[MAX];
int LCIS(int *a,int * b)
{
memset(dp,0,sizeof(dp));
for(int i = 0;i<n;i++)
{
int k = 0;
for(int j = 0;j<m;j++)
{
if(a[i]==b[j])
{
if(dp[j]<dp[k] + 1)//就在0到j-1之间,找一个b[k]小于a[i]的dp[k]值最大的解
{
dp[j] = dp[k] + 1;
}
}
else if(a[i]>b[j])//0到j-1中,对于小于a[i]的,保存dp值的最优解
{
if(dp[k]<dp[j])
k = j;
}
}
}
int ans = 0;
for(int i = 0;i<m;i++)
{
ans = max(ans,dp[i]);
}
return ans;
}