Language: C++

#include<iostream>
#include<set>
#include<vector>
using namespace std;
typedef long long li;
#define abs(n) max((n),-(n))
#define repa(i,a,n) for(int i=(a);i<(n);i++)
#define chmax(a,b) (a<(b)?a=(b),1:0)
#define rep(i,n) for(int i=0;i<(n);i++)
#define df 0
template<class T> void print(const T& t){ cout << t << "\n"; }
template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
// Container コンテナ型, map以外
template< template<class ...> class Ctn,class T>
std::ostream& operator<<(std::ostream& os,const Ctn<T>& v){
  auto itr=v.begin();
  while(itr!=v.end()){
    if(itr!=v.begin())cout << " ";
    cout << *(itr++);
  }
  return os;
}


int main(){
  int h,w; cin >>h >>w;
  vector<vector<int>> sq(h,vector<int>(w));
  rep(i,h) rep(j,w) cin >>sq[i][j];
  rep(i,h) rep(j,w){
    int a; cin >>a;
    sq[i][j]-=a;
    sq[i][j]=abs(sq[i][j]);
  } 
  
  vector<vector<set<int>>> dp(h,vector<set<int>>(w));
  dp[0][0].insert(sq[0][0]);
  
  rep(i,h) rep(j,w){
    if(i!=0) for(int x:dp[i-1][j]){
        dp[i][j].insert(abs(x-sq[i][j]));
        if(x<(h+w)*80) dp[i][j].insert(x+sq[i][j]);
      }
        
      
    if(j!=0) for(int x:dp[i][j-1]){
        dp[i][j].insert(abs(x-sq[i][j]));
        if(x<(h+w)*80) dp[i][j].insert(x+sq[i][j]);
      }
    
    if(df)print(i,j,":",dp[i][j]);
  }    
  
  print(*dp[h-1][w-1].begin());
}
#define df 0
#include<iostream>
#include<set>
#include<vector>
using namespace std;
typedef long long li;
#define abs(n) max((n),-(n))
#define repa(i,a,n) for(int i=(a);i<(n);i++)
#define chmax(a,b) (a<(b)?a=(b),1:0)
#define rep(i,n) for(int i=0;i<(n);i++)
#define df 0
template<class T> void print(const T& t){ cout << t << "\n"; }
template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
// Container コンテナ型, map以外
template< template<class ...> class Ctn,class T>
std::ostream& operator<<(std::ostream& os,const Ctn<T>& v){
  auto itr=v.begin();
  while(itr!=v.end()){
    if(itr!=v.begin())cout << " ";
    cout << *(itr++);
  }
  return os;
}


int main(){
  int h,w; cin >>h >>w;
  vector<vector<int>> sq(h,vector<int>(w));
  rep(i,h) rep(j,w) cin >>sq[i][j];
  rep(i,h) rep(j,w){
    int a; cin >>a;
    sq[i][j]-=a;
    sq[i][j]=abs(sq[i][j]);
  } 
  
  vector<vector<set<int>>> dp(h,vector<set<int>>(w));
  dp[0][0].insert(sq[0][0]);
  
  rep(i,h) rep(j,w){
    if(i!=0) for(int x:dp[i-1][j]){
        dp[i][j].insert(abs(x-sq[i][j]));
        if(x<(h+w)*80) dp[i][j].insert(x+sq[i][j]);
      }
        
      
    if(j!=0) for(int x:dp[i][j-1]){
        dp[i][j].insert(abs(x-sq[i][j]));
        if(x<(h+w)*80) dp[i][j].insert(x+sq[i][j]);
      }
    
    if(df)print(i,j,":",dp[i][j]);
  }    
  
  print(*dp[h-1][w-1].begin());
}

Compiler output:
a.cc:66:24: error: redefinition of 'template<class T> void print(const T&)'
   66 | template<class T> void print(const T& t){ cout << t << "\n"; }
      |                        ^~~~~
a.cc:11:24: note: 'template<class T> void print(const T&)' previously declared here
   11 | template<class T> void print(const T& t){ cout << t << "\n"; }
      |                        ^~~~~
a.cc:67:37: error: redefinition of 'template<class T, class ... Ts> void print(const T&, const Ts& ...)'
   67 | template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
      |                                     ^~~~~
a.cc:12:37: note: 'template<class T, class ... Ts> void print(const T&, const Ts& ...)' previously declared here
   12 | template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
      |                                     ^~~~~
a.cc:70:15: error: redefinition of 'template<template<class ...> class Ctn, class T> std::ostream& operator<<(std::ostream&, const Ctn<T>&)'
   70 | std::ostream& operator<<(std::ostream& os,const Ctn<T>& v){
      |               ^~~~~~~~
a.cc:15:15: note: 'template<template<class ...> class Ctn, class T> std::ostream& operator<<(std::ostream&, const Ctn<T>&)' previously declared here
   15 | std::ostream& operator<<(std::ostream& os,const Ctn<T>& v){
      |               ^~~~~~~~
a.cc:80:5: error: redefinition of 'int main()'
   80 | int main(){
      |     ^~~~
a.cc:25:5: note: 'int main()' previously defined here
   25 | int main(){
      |     ^~~~
a.cc: In instantiation of 'void print(const T&) [with T = std::set<int>]':
a.cc:12:122:   recursively required from 'void print(const T&, const Ts& ...) [with T = int; Ts = {char [2], std::set<int, std::less<int>, std::allocator<int> >}]'
   12 | template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
      |                                                                                                                     ~~~~~^~~~~~~
a.cc:12:122:   required from 'void print(const T&, const Ts& ...) [with T = int; Ts = {int, char [2], std::set<int, std::less<int>, std::allocator<int> >}]'
a.cc:50:16:   required from here
   50 |     if(df)print(i,j,":",dp[i][j]);
      |           ~~~~~^~~~~~~~~~~~~~~~~~
a.cc:11:48: error: no match for 'operator<<' (operand types are 'std::ostream' {aka 'std::basic_ostream<char>'} and 'const std::set<int>')
   11 | template<class T> void print(const T& t){ cout << t << "\n"; }
      |                                           ~~~~~^~~~
In file included from /usr/include/c++/14/iostream:41,
                 from a.cc:1:
/usr/include/c++/14/ostream:116:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(__ostream_type& (*)(__ostream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  116 |       operator<<(__ostream_type& (*__pf)(__ostream_type&))
      |       ^~~~~~~~
/usr/include/c++/14/ostream:116:36: note:   no known conversion for argument 1 from 'const std::set<int>' to 'std::basic_ostream<char>::__ostream_type& (*)(std::basic_ostream<char>::__ostream_type&)' {aka 'std::basic_ostream<char>& (*)(std::basic_ostream<char>&)'}
  116 |       operator<<(__ostream_type& (*__pf)(__ostream_type&))
      |                  ~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/ostream:125:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(__ios_type& (*)(__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>; __ios_type = std::basic_ios<char>]'
  125 |       operator<<(__ios_type& (*__pf)(__ios_type&))
      |       ^~~~~~~~
/usr/include/c++/14/ostream:125:32: note:   no known conversion for argument 1 from 'const std::set<int>' to 'std::basic_ostream<char>::__ios_type& (*)(std::basic_ostream<char>::__ios_type&)' {aka 'std::basic_ios<char>& (*)(std::basic_ios<char>&)'}
  125 |       operator<<(__ios_type& (*__pf)(__ios_type&))
      |                  ~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~
/usr/include/c++/14/ostream:135:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  135 |       operator<<(ios_base& (*__pf) (ios_base&))
      |       ^~~~~~~~
/usr/include/c++/14/ostream:135:30: note:   no known conversion for argument 1 from 'const std::set<int>' to 'std::ios_base& (*)(std::ios_base&)'
  135 |       operator<<(ios_base& (*__pf) (ios_base&))
      |                  ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~
/usr/include/c++/14/ostream:174:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  174 |       operator<<(long __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:174:23: note:   no known conversion for argument 1 from 'const std::set<int>' to 'long int'
  174 |       operator<<(long __n)
      |                  ~~~~~^~~
/usr/include/c++/14/ostream:178:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  178 |       operator<<(unsigned long __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:178:32: note:   no known conversion for argument 1 from 'const std::set<int>' to 'long unsigned int'
  178 |       operator<<(unsigned long __n)
      |                  ~~~~~~~~~~~~~~^~~
/usr/include/c++/14/ostream:182:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  182 |       operator<<(bool __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:182:23: note:   no known conversion for argument 1 from 'const std::set<int>' to 'bool'
  182 |       operator<<(bool __n)
      |                  ~~~~~^~~
In file included from /usr/include/c++/14/ostream:1022:
/usr/include/c++/14/bits/ostream.tcc:96:5: note: candidate: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char; _Traits = std::char_traits<char>]'
   96 |     basic_ostream<_CharT, _Traits>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/ostream.tcc:97:22: note:   no known conversion for argument 1 from 'const std::set<int>' to 'short int'
   97 |     operator<<(short __n)
      |                ~~~~~~^~~
/usr/include/c++/14/ostream:189:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  189 |       operator<<(unsigned short __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:189:33: note:   no known conversion for argument 1 from 'const std::set<int>' to 'short unsigned int'
  189 |       operator<<(unsigned short __n)
      |                  ~~~~~~~~~~~~~~~^~~
/usr/include/c++/14/bits/ostream.tcc:110:5: note: candidate: 'std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char; _Traits = std::char_traits<char>]'
  110 |     basic_ostream<_CharT, _Traits>::
      |     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/c++/14/bits/ostream.tcc:111:20: note:   no known conversion for argument 1 from 'const std::set<int>' to 'int'
  111 |     operator<<(int __n)
      |                ~~~~^~~
/usr/include/c++/14/ostream:200:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  200 |       operator<<(unsigned int __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:200:31: note:   no known conversion for argument 1 from 'const std::set<int>' to 'unsigned int'
  200 |       operator<<(unsigned int __n)
      |                  ~~~~~~~~~~~~~^~~
/usr/include/c++/14/ostream:211:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  211 |       operator<<(long long __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:211:28: note:   no known conversion for argument 1 from 'const std::set<int>' to 'long long int'
  211 |       operator<<(long long __n)
      |                  ~~~~~~~~~~^~~
/usr/include/c++/14/ostream:215:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  215 |       operator<<(unsigned long long __n)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:215:37: note:   no known conversion for argument 1 from 'const std::set<int>' to 'long long unsigned int'
  215 |       operator<<(unsigned long long __n)
      |                  ~~~~~~~~~~~~~~~~~~~^~~
/usr/include/c++/14/ostream:231:7: note: candidate: 'std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char; _Traits = std::char_traits<char>; __ostream_type = std::basic_ostream<char>]'
  231 |       operator<<(double __f)
      |       ^~~~~~~~
/usr/include/c++/14/ostream:231:25: note:   no known conversion for argument 1 from 'const std::set<int>' to 'double'
  231 |       operator<<(doub