竹子听

4月2日 Plan 1

这什么LCS老早之前就已经打过了啊。。。

虽然这是O(n^2)的暴力背包,但这应该够用的吧。。。

网上的O(n)算法太长了哈哈哈,大概省选以后看吧。


#include<cstdio>

#include<cstring>

#define maxn 1001

#define max(x,y) x>y?x:y

#define min(x,y) x<y?x:y

int a[maxn],b[maxn],t[maxn][maxn],n,m;

void clear()

{

memset(a,0,sizeof(int));

memset(b,0,sizeof(int));

memset(t,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=1;j<=m;j++)

{

t[i][j]=max(max(max(t[i][j],t[i-1][j]),t[i][j-1]),t[i-1][j-1]);

if(a[i]==b[j]) t[i][j]++;

}

printf("%d\n",t[n][m]);

}


评论