给你两串数A,B,让你随意排列这些数使它们的最长公共子序列最长。
开始还以为是DP,后来觉得,这个真没必要呀。
因为可以按任何安排,那么只要知道这两个序列中有多少个数是相同的就OK了,那一定是最长的。
直接排序,两个都排序,然后按顺序查找就OK了。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int main(void)
{
int lena,lenb;
int a[10005],b[10005];
while( scanf("%d%d",&lena,&lenb)!=EOF )
{
for(int i=0; i<lena; i++)
scanf("%d",&a[i]);
for(int i=0; i<lenb; i++)
scanf("%d",&b[i]);
sort(a,a+lena);
sort(b,b+lenb);
int temp = 0,maxlen = 0;
for(int i=0; i<lena; i++)
for(int k=temp; k<lenb; k++)
{
if( a[i] == b[k] )
{
maxlen++;
temp = k+1;
break;
}
}
printf("%d/n",maxlen);
}
return 0;
}