首页 > 代码库 > ZOJ 3019 Puzzle
ZOJ 3019 Puzzle
For sequences of integers a and b, if you can make the two sequences the same by deleting some elements in a and b, we call the remaining sequence "the common sub sequence". And we call the longest one the LCS.
Now you are given two sequences of integers a and b. You can arrange elements in a and b in any order. You are to calculate the max length of the LCS of each arrangement ofa and b.
Input
Input will consist of multiple test cases. The first line of each case is two integers N(0 < N < 10000), M(0 < M < 10000) indicating the length ofa and b. The second line is N 32-bit signed integers ina. The third line is M 32-bit signed integers in b.
Output
Each case one line. The max length of the LCS of each arrangement of a andb.
Sample Input
5 4 1 2 3 2 1 1 4 2 1
Sample Output
3
公共序列最长(乱序)
排序,然后找就行
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 100005 int a[N],b[N]; int main() { int aa,bb,i; while(~scanf("%d%d",&aa,&bb)) { for(i=0;i<aa;i++) scanf("%d",&a[i]); for(i=0;i<bb;i++) scanf("%d",&b[i]); sort(a,a+aa); sort(b,b+bb); int ans=0; int j=0,temp=0;//temp是重点 for(i=0;i<aa;i++) for(j=temp;j<bb;j++) if(a[i]==b[j]) { ans++; temp=j+1; break; } printf("%d\n",ans); } return 0; }