记录编号 28904 评测结果 AAAAAAAAAA
题目名称 交错匹配 最终得分 100
用户昵称 Gravatar苏轼 是否通过 通过
代码语言 C++ 运行时间 0.013 s
提交时间 2011-10-18 13:54:24 内存使用 0.43 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int m,n,a[204],b[204],q[204][204]={{0}};
int x,y,ji1,ji2;
int main()
{
	freopen ("crossa.in","r",stdin);
	freopen ("crossa.out","w",stdout);
	scanf("%d%d\n",&m,&n);
	for (int i=1;i<=m;i++)
		scanf("%d",&a[i]);
	scanf("\n");
	for (int i=1;i<=n;i++)
		scanf("%d",&b[i]);
	for (int i=1;i<=m;i++)
		for (int j=1;j<=n;j++)
		{
			if (q[i][j-1]>q[i-1][j])
			{
				q[i][j]=q[i][j-1];
			}
			else
			{
				q[i][j]=q[i-1][j];
			}
			ji1=0;
			ji2=0;
			if (a[i]==b[j])
			{
				continue;
			}
			for (int k=j-1;k>=1;k--)
			{
				if (b[k]==a[i])
				{
					y=k;
					ji1=1;
					break;
				}
			}
			for (int k=i-1;k>=1;k--)
			{
				if (b[j]==a[k])
				{
					x=k;
					ji2=1;
					break;
				}
			}
			if (ji1&&ji2&&q[i][j]<q[x-1][y-1]+1)
			{
				q[i][j]=q[x-1][y-1]+1;
			}
		}
	printf("%d\n",q[m][n]*2);
	return 0;
}