DP, the topic is very long, test instructions is to seek LCS.
#include <cstdio> #include <cstring> #include <string> #include <queue> #include <algorithm > #include <map> #include <stack> #include <iostream> #include <list> #include <set># include<vector> #include <cmath> #define INF 0x7fffffff#define EPS 1e-8#define LL long long#define PI 3.141592654#define CLR (A, B) memset (A,b,sizeof (a)) #define for (I,a,n) for (int. i= a;i< N; i++) #define FOR0 (i,a,b) for ( int i=a;i>=b;i--) #define PB push_back#define mp make_pair#define ft first#define SD second#define SF scanf#define PF PR Intf#define Acfun Std::ios::sync_with_stdio (false) #define SIZE 100+1using namespace Std;int a[size],b[size],dp[size][ Size];int Main () {int la,lb; int ca=1; while (~SF ("%d%d", &la,&lb), la| | LB) {for (I,0,la) SF ("%d", &a[i]); for (I,0,LB) SF ("%d", &b[i]); CLR (dp,0); for (I,0,la) for (j,0,lb) {if (A[i]==b[j]) dp[i+1][j+1]=dp[i][j]+1; else Dp[i+1][j+1]=max (dp[i+1][j],dp[i][j+1]); } pf ("Twin Towers #%d\n", ca++); PF ("Number of Tiles:%d\n\n", dp[la][lb]); }}
UVA 10066 the Twin Towers