fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. const int N=500;
  5. ll a[N],b[N],n,m;
  6. void input()
  7. {
  8. cin>>n>>m;
  9. for(int i=1;i<=n;i++)cin>>a[i];
  10. for(int i=1;i<=m;i++)cin>>b[i];
  11. }
  12. ll len[N][N];
  13. void Dp()
  14. {
  15. for(int i=1;i<=n;i++)len[i][0]=0;
  16. for(int i=1;i<=m;i++)len[0][i]=0;
  17. for(int i=1;i<=n;i++)
  18. for(int j=1;j<=m;j++)
  19. {
  20. if(a[i]==b[j])len[i][j]=len[i-1][j-1]+1;
  21. else len[i][j]=max(len[i-1][j],len[i][j-1]);
  22. }
  23. cout<<len[n][m]<<"\n";
  24. }
  25. void Trace()
  26. {
  27. ll i=n,j=m;
  28. vector<ll> ans;
  29. while(i>0&&j>0)
  30. {
  31. if(a[i]==b[j])
  32. {
  33. ans.push_back(a[i]);
  34. i--;
  35. j--;
  36. }
  37. else if(len[i][j]==len[i][j-1])j--;
  38. else i--;
  39. }
  40. for(int i=ans.size()-1;i>=0;i--)cout<<ans[i]<<" ";
  41. }
  42. int main()
  43. {
  44. ios_base::sync_with_stdio(0);
  45. cin.tie(0);
  46. cout.tie(0);
  47. input();
  48. Dp();
  49. Trace();
  50. return 0;
  51. }
Success #stdin #stdout 0.01s 5408KB
stdin
Standard input is empty
stdout
0