Language: C++

#include<iostream>
#include<string>
using namespace std;
string s,t;
string sub[3000][3000];
string dp(int x,int y);
int main()
{
  int p,q;
  cin>>s>>t;
  p=s.size();
  q=t.size();
  cout<<dp(p,q);
  return 0;
}
string dp(int x,int y)
{
  if(sub[x][y].empty()==0)return sub[x][y];
  
  string a,b;
  if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
                     else{ sub[x][y]=s[x-1];return sub[x][y];}
                    }
  if(x!=1&&y!=1)
  {a=dp(x-1,y);b=dp(x,y-1);
   if(a.size()>b.size()){sub[x][y]=a;return sub[x][y];} else{sub[x][y]=b;return sub[x][y];}
  }
  if(x==1&&y!=1)
  {sub[x][y]=dp(x,y-1);return sub[x][y];}
  if(x!=1&&y==1)
  {sub[x][y]=dp(x-1,y);return sub[x][y];}
  if(x==1&&y==1)
  {sub[x][y]="";return sub[x][y];}  
}    
  

Compiler output:
a.cc: In function 'std::string dp(int, int)':
a.cc:21:53: warning: pointer to a function used in arithmetic [-Wpointer-arith]
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
      |                                                     ^
cc1plus: warning: pointer to a function used in arithmetic [-Wpointer-arith]
a.cc:21:58: warning: pointer to a function used in arithmetic [-Wpointer-arith]
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
      |                                                          ^
cc1plus: warning: pointer to a function used in arithmetic [-Wpointer-arith]
a.cc:21:59: warning: pointer to a function used in arithmetic [-Wpointer-arith]
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
a.cc:21:65: error: no match for 'operator=' (operand types are 'std::string' {aka 'std::__cxx11::basic_string<char>'} and 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'})
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
      |                                                                 ^
In file included from /usr/include/c++/14/string:54,
                 from /usr/include/c++/14/bits/locale_classes.h:40,
                 from /usr/include/c++/14/bits/ios_base.h:41,
                 from /usr/include/c++/14/ios:44,
                 from /usr/include/c++/14/ostream:40,
                 from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/bits/basic_string.h:840:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(_CharT) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]' (near match)
  840 |       operator=(_CharT __c)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:840:7: note:   conversion of argument 1 would be ill-formed:
a.cc:21:59: error: invalid conversion from 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'} to 'char' [-fpermissive]
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
/usr/include/c++/14/bits/basic_string.h:941:8: note: candidate: 'template<class _Tp> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_If_sv<_Tp, std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&> std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  941 |        operator=(const _Tp& __svt)
      |        ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:941:8: note:   template argument deduction/substitution failed:
In file included from /usr/include/c++/14/bits/move.h:37,
                 from /usr/include/c++/14/bits/exception_ptr.h:41,
                 from /usr/include/c++/14/exception:166,
                 from /usr/include/c++/14/ios:41:
/usr/include/c++/14/type_traits: In substitution of 'template<bool _Cond, class _Tp> using std::enable_if_t = typename std::enable_if::type [with bool _Cond = false; _Tp = std::__cxx11::basic_string<char>&]':
/usr/include/c++/14/bits/basic_string.h:149:8:   required by substitution of 'template<class _CharT, class _Traits, class _Alloc> template<class _Tp, class _Res> using std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::_If_sv = std::enable_if_t<((bool)std::__and_<std::is_convertible<const _Tp&, std::basic_string_view<_CharT, _Traits> >, std::__not_<std::is_convertible<const _Tp*, const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>*> >, std::__not_<std::is_convertible<const _Tp&, const _CharT*> > >::value), _Res> [with _Tp = std::__cxx11::basic_string<char> (*)(int, int); _Res = std::__cxx11::basic_string<char>&; _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  149 |         using _If_sv = enable_if_t<
      |               ^~~~~~
/usr/include/c++/14/bits/basic_string.h:941:8:   required by substitution of 'template<class _Tp> std::__cxx11::basic_string<char>::_If_sv<_Tp, std::__cxx11::basic_string<char>&> std::__cxx11::basic_string<char>::operator=(const _Tp&) [with _Tp = std::__cxx11::basic_string<char> (*)(int, int)]'
  941 |        operator=(const _Tp& __svt)
      |        ^~~~~~~~
a.cc:21:65:   required from here
   21 |   if(s[x-1]==t[y-1]){if(x!=1&&y!=1){sub[x][y]=dp[x-1][y-1]+s[x-1];return sub[x][y];}
      |                                                                 ^
/usr/include/c++/14/type_traits:2711:11: error: no type named 'type' in 'struct std::enable_if<false, std::__cxx11::basic_string<char>&>'
 2711 |     using enable_if_t = typename enable_if<_Cond, _Tp>::type;
      |           ^~~~~~~~~~~
/usr/include/c++/14/bits/basic_string.h:817:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  817 |       operator=(const basic_string& __str)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:817:37: note:   no known conversion for argument 1 from 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'} to 'const std::__cxx11::basic_string<char>&'
  817 |       operator=(const basic_string& __str)
      |                 ~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/14/bits/basic_string.h:828:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(const _CharT*) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  828 |       operator=(const _CharT* __s)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:828:31: note:   no known conversion for argument 1 from 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'} to 'const char*'
  828 |       operator=(const _CharT* __s)
      |                 ~~~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/basic_string.h:858:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(std::__cxx11::basic_string<_CharT, _Traits, _Alloc>&&) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  858 |       operator=(basic_string&& __str)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:858:32: note:   no known conversion for argument 1 from 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'} to 'std::__cxx11::basic_string<char>&&'
  858 |       operator=(basic_string&& __str)
      |                 ~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/14/bits/basic_string.h:926:7: note: candidate: 'std::__cxx11::basic_string<_CharT, _Traits, _Alloc>& std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::operator=(std::initializer_list<_Tp>) [with _CharT = char; _Traits = std::char_traits<char>; _Alloc = std::allocator<char>]'
  926 |       operator=(initializer_list<_CharT> __l)
      |       ^~~~~~~~
/usr/include/c++/14/bits/basic_string.h:926:42: note:   no known conversion for argument 1 from 'std::string (*)(int, int)' {aka 'std::__cxx11::basic_string<char> (*)(int, int)'} to 'std::initializer_list<char>'
  926 |       operator=(initializer_list<_CharT> __l)
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~^~~
a.cc:34:1: warning: control reaches end of non-void function [-Wreturn-type]
   34 | }
      | ^