记录编号 |
79649 |
评测结果 |
AAAAAAAAAA |
题目名称 |
交错匹配 |
最终得分 |
100 |
用户昵称 |
Launcher |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.283 s |
提交时间 |
2013-11-06 08:19:39 |
内存使用 |
3.74 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
int a[1002]={0};
int b[1002]={0};
int f[1002][1002]={0};
int n,m;
int Max(int x,int y)
{
if (x>y)
return x;
else
return y;
}
int main()
{
freopen("crossa.in","r",stdin);
freopen("crossa.out","w",stdout);
cin>>n>>m;
int i,j,k,p,q,t,l;
for (i=1;i<=n;i++)
cin>>a[i];
for (i=1;i<=m;i++)
cin>>b[i];
f[0][0]=0;
int x1,x2;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
p=a[i];
q=b[j];
f[i][j]=Max(f[i-1][j],f[i][j-1]);
f[i][j]=Max(f[i][j],f[i-1][j-1]);
if (p!=q)
{
t=0;
x1=0;x2=0;
for (k=j-1;k>=1;k--)
for (l=i-1;l>=1;l--)
if ((b[k]==p)&&(a[l]==q))
{
x2=k;
x1=l;
//printf("%d %d %d %d %d\n",i,j,x1,x2,f[x1-1][x2-1]+2);
f[i][j]=Max(f[i][j],f[x1-1][x2-1]+2);
}
}
}
/* for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
cout<<f[i][j]<<' ';
cout<<endl;
}*/
cout<<f[n][m]<<endl;
return 0;
}