Longest common sub-sequence
#include <iostream> #include <map> #include <string> #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath> #include <queue> #include <vector> #include <algorithm >using namespace Std;int a[110];int b[110];int dp[110][110];int dfs (int i,int j) {if (i<0| | j<0) return 0;if (dp[i][j]!=-1) return dp[i][j];if (A[i]==b[j]) Dp[i][j]=dfs (i-1,j-1) +1;elsedp[i][j]=max (Dfs (i-1,j ), DFS (i,j-1)); return dp[i][j];} int main () {int Cs=0,n,m,i,j;while (cin>>n>>m) {if (n==0| | m==0) break;for (i=0;i<n;i++) cin>>a[i];for (i=0;i<m;i++) Cin>>b[i];memset (Dp,-1,sizeof (DP));d FS ( n-1,m-1);p rintf ("Twin Towers #%d\nnumber of Tiles:%d\n\n", ++cs,dp[n-1][m-1]);} return 0;}
#include <iostream> #include <map> #include <string> #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath> #include <queue> #include <vector> #include <algorithm >using namespace Std;int a[110];int b[110];int dp[110][110];int main () {int Cs=0,n,m,i,j;while (cin>>n>> m) {if (n==0| | m==0) break;for (i=0;i<n;i++) cin>>a[i];for (i=0;i<m;i++) Cin>>b[i];memset (Dp,0,sizeof (DP)); for (i =1;i<=n;i++) for (j=1;j<=m;j++) if (A[i-1]==b[j-1]) Dp[i][j]=dp[i-1][j-1]+1;elsedp[i][j]=max (Dp[i-1][j],dp[i] [J-1]); printf ("Twin Towers #%d\nnumber of Tiles:%d\n\n", ++cs,dp[n][m]);} return 0;}
UVA-10066 the Twin Towers