4月2日 Plan 2
呼.....原来是这样的......最长公共子串
子串:连续的
子序列:非连续的
我就说为什么我看了这么久的标算,还纳闷怎么能这么写呢??
果然是理解错了
这应十分应景的响起“若果标算太难请坚定信念,不如回头再看一眼题面”
唉果然是我太弱了Orz
构造一个二维矩阵,对角线求最长就ok了
***注意滚动数组要倒过来的啊,怎么太久没写动规了这都忘了
#include<cstdio>
#include<cstring>
#define maxn 1001
#define max(x,y) x>y?x:y
#define min(x,y) x<y?x:y
int n,m,a[maxn],b[maxn],t[maxn],ans=0;
void clear()
{
memset(t,0,sizeof(int));
memset(a,0,sizeof(int));
memset(b,0,sizeof(int));
}
int main()
{
clear();
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=m;i++) scanf("%d",&b[i]);
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
{
if(a[i]==b[j]) t[j]=t[j-1]+1;
else t[j]=0;
ans=max(ans,t[j]);
}
printf("%d",ans);
}
评论