题目:
(题目显示有问题,s长度为n,t长度为m)
分析:
代码:
#include <iostream>
#include <queue>
using namespace std;
int n,m;//2个字符串的长度
/*dp数组为全局变量可以不初始化
非全局可以使用memset(dp,0,sizeof(dp));进行初始化
*/
int dp[1001][1001];//dp数组
char s[1001],t[1001];//对比字符串
int max(int a,int b){
return a>b?a:b;
}
int main(){
cin>>n>>m;
cin>>s;
cin>>t;
queue<char> qc;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(s[i]==t[j]){
qc.push(s[i]);
dp[i+1][j+1]=dp[i][j]+1;
}else{
dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
}
}
}
cout<<dp[n][m]<<endl;
while(!qc.empty()){
cout<<qc.front();
qc.pop();
}
return 0;
}