#include #include #include #include #include #include #include using namespace std; typedef pair PII; typedef vector VI; typedef vector> VII; template void print(vector sez) { for (T x : sez) cout << x << " "; cout << endl; } int fib(int n) { if (n<=1) return n; return fib(n-1)+fib(n-2); } int memo[1001]; int fib2(int n) { if (n<=1) return n; if (memo[n]>0) return memo[n]; memo[n] = fib2(n-1)+fib2(n-2); return memo[n]; } int inf=1e9; int a=3,b=4; int mem_jump[100]; int jump(int i, vector &x) { int n=x.size(); if (i==n-1) return 0; if (mem_jump[i]) return mem_jump[i]; int best=inf; for (int j=i+1;j x={0,3,4,6,10}; cout << jump(0,x) << endl; */ /* vector c = {0,2,5,6,9,15,16,17,20}; int N=8; int f[100]; f[0]=0; for (int n=1;n<=N;n++) { f[n]=0; for (int x=1;x<=n;x++) { f[n]=max(f[n], f[n-x]+c[x]); } } cout << f[N] << endl; int n=N; while (n>0) { for (int x=1;x<=n;x++) { if (f[n]==f[n-x]+c[x]) { cout << x << endl; n-=x; break; } } } */ /* vector t={".#....", "....#.", ".#..#.", "......"}; int h=t.size(), w=t[0].size(); int f[10][10]; memset(f,0,sizeof(f)); for (int i=h-1;i>=0;i--) { for (int j=w-1;j>=0;j--) { if (i==h-1 && j==w-1) f[i][j]=1; else if (t[i][j]=='#') f[i][j]=0; else f[i][j] = f[i+1][j] + f[i][j+1]; } } cout << f[0][0] << endl; */ string s="ABCBDAB"; string t="BDCBBA"; int n=s.size(), m=t.size(); int lcs[20][20]; memset(lcs,0,sizeof(lcs)); for (int i=n-1;i>=0;i--) { for (int j=m-1;j>=0;j--) { lcs[i][j]=max(lcs[i+1][j], lcs[i][j+1]); if (s[i]==t[j]) { lcs[i][j]=max(lcs[i][j], 1+lcs[i+1][j+1]); } } } for (int i=0;i<=n;i++) { for (int j=0;j<=m;j++) { cout << lcs[i][j] << " "; } cout << endl; } cout << lcs[0][0] << endl; string l=""; int i=0,j=0; while (i