题目地址:http://pat.zju.edu.cn/contests/pat-a-practise/1045
注意:超时问题,使用DP
代码如下:
#include <iostream>
#include <fstream>
#include <cstdio>
using namespace std;
//ifstream fin("C:\\Users\\Devon\\Desktop\\input.txt");
//#define cin fin
int like[201]={0};
int given[10001]={0};
int len[201][10001]={0};//数组记录长度
int LCS(int row,int col){//原本使用递归,用例3、4超时
int i,j;
int vmax;
for(i=1;i<=row;i++){
for(j=1;j<=col;j++){
vmax = len[i-1][j-1];
if(vmax < len[i][j-1]) vmax = len[i][j-1];
if(vmax < len[i-1][j]) vmax = len[i-1][j];
if(like[i]==given[j]) len[i][j] = vmax+1;
else len[i][j] = vmax;
}
}
return len[row][col];
}
int main(){
int n,m,l;
cin>>n>>m;
int i;
for(i=0;i<m;i++)cin>>like[i+1];
cin>>l;
for(i=0;i<l;i++)cin>>given[i+1];
cout<<LCS(m,l)<<endl;
return 0;
}