变种最长公共子序列,自己画个数组算一下就知道过程了
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main()
{
int n;
int m;
int *eva;
int l;
int *stripe;
int **maxcomm;
cin >> n;
cin >> m;
eva = new int[m];
for(int i = 0; i < m; i++)
cin >> eva[i];
cin >> l;
stripe = new int[l];
for(int i = 0; i < l; i++)
cin >> stripe[i];
maxcomm = (int **)malloc(sizeof(int *)*(l+1));
for(int i = 0; i <= l; i++)
{
maxcomm[i] = new int[m+1];
maxcomm[i][0] = 0;
}
for(int i = 0; i <= m; i++)
maxcomm[0][i] = 0;
for(int i = 1; i <= l; i++)
{
for(int j = 1; j <= m; j++)
{
maxcomm[i][j] = max(maxcomm[i-1][j-1], max(maxcomm[i-1][j], maxcomm[i][j-1]));
if(stripe[i-1] == eva[j-1])
maxcomm[i][j] += 1;
}
}
cout << maxcomm[l][m];
return 0;
}