Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3361821) | Cod sursa (job #3361486) | Cod sursa (job #3361510)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("cmlsc.in");
ofstream cout ("cmlsc.out");
int a[1025],b[1025],dp[1025][1025],rez[1025];
int main(){
int m,n;
cin>>m>>n;
for(int i=1;i<=m;i++)
cin>>a[i];
for (int i=1;i<=n;i++)
cin>>b[i];
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
if(a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
}
cout<<dp[m][n]<<"\n";
int x=m,y=n,k=0;
while(x>0 && y>0){
if(a[x]==b[y]){
rez[k++]=a[x];
x--;
y--;
}
else if(dp[x-1][y]>=dp[x][y-1])
x--;
else
y--;
}
for(int i=k-1;i>=0;i--)
cout<<rez[i]<<" ";
return 0;
}