题意:给出两组数列,求其最长上升公共子序列的个数;
还是不会说...自己看...
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m,a[510],b[510],f[510];
int LCIS()
{
int i,j,k;
memset(f,0,sizeof(f));
for (i=0;i<n;i++)
{
k=0;
for (j=0;j<m;j++)
{
if (a[i]==b[j])
{
if (f[j]<f[k]+1)
f[j]=f[k]+1;
}
else if (a[i]>b[j])
{
if (f[j]>f[k])
k=j;
}
}
}
int ans=0;
for (i=0;i<m;i++)
if (ans<f[i])
ans=f[i];
return ans;
}
int main()
{
int T,i;
scanf("%d",&T);
while (T--)
{
scanf("%d",&n);
for (i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for (i=0;i<m;i++)
scanf("%d",&b[i]);
printf("%d\n",LCIS());
if (T) printf("\n");
}
return 0;
}
本文介绍了一种求解两组数列中最长上升公共子序列的算法实现,通过动态规划的方法来寻找两个数列中元素按升序排列且相同的最长子序列。文章提供了完整的C++代码示例。
1087

被折叠的 条评论
为什么被折叠?



