1401: Sherlock and Moriarty II
时间限制: 1 Sec 内存限制: 128 MB提交: 89 解决: 31
[ 提交][ 状态][ 讨论版]
题目描述
Sherlock Holmes is an excellent detective and Moriarty is the big villain. One day Moriarty kidnaps Sherlock's
boyfriend ---- Jhon Watson. Of course,Sherlock goes to save him. As sherlock has found the password in the previous
problem.When he finds Jhon, there is a time bomb. Sherlock has to defuse the bomb.
The bomb has a special coded lock,the lock has two sequence A and B, Sherlock has to find a new Sequence C , C is
both the subsequence of A and B, and for each i<j C[i]<C[j]. The length of C should be as long as possible.The length
of sequence C is the password.
输入
There are several cases.
For each case,the first line is N and M (1<=n,m<=100)
And the is sequence A and B , length(A)=N length(B)=M (0<= A[i],B[i]<=50)
输出
The length of sequence C.
样例输入
5 5
1 2 0 4 5
1 0 4 5 2
样例输出
3
这是最复杂
#include<stdio.h>
#include<string.h>
struct node{ int max, len; };
int a[101];
int b[101];
node c[101][101];
int asize, bsize;
int main(){
//freopen("in.txt", "r", stdin);
while (~scanf("%d%d", &asize, &bsize)){
int i, j,m,n;
for (i = 0; i < asize; i++)
scanf("%d", &a[i]);
for (i = 0; i < bsize; i++)
scanf("%d", &b[i]);
memset(c, 0, sizeof(c));
for (i = 0; i < asize;i++)
for (j = 0; j < bsize; j++)
{
if (a[i] != b[j])continue;
c[i][j].len = 1;
c[i][j].max = a[i];
for (m = 0; m < i;m++)
for (n = 0; n < j; n++)
if (c[m][n].max<a[i] && 1 + c[m][n].len>c[i][j].len)
c[i][j].len = 1 + c[m][n].len;
}
m = 0;
for (i = 0; i < asize;i++)
for (j = 0; j < bsize; j++){
if (c[i][j].len>m)m = c[i][j].len;
}
printf("%d\n", m);
}
return 0;
}