Language: C++

#include <bits/stdc++.h> 

using namespace std; 

#define INF 1001000100010001000 
#define MOD 1000000007 
#define EPS 1e-10 
#define int long long 
#define rep(i, N) for (int i = 0; i < N; i++) 
#define Rep(i, N) for (int i = 1; i < N; i++) 
#define For(i, a, b) for (int i = (a); i < (b); i++) 
#define pb push_back 
#define eb emplace_back 
#define mp make_pair 
#define i_i pair<int, int> 
#define vi vector<int> 
#define vvi vector<vi > 
#define vb vector<bool> 
#define vvb vector<vb > 
#define vp vector< i_i > 
#define all(a) (a).begin(), (a).end() 
#define Int(x) int x; cin >> x; 
#define int2(x, y) Int(x); Int(y); 
#define int3(x, y, z) Int(x); int2(y, z); 
#define fir first #define sec second 
#define ffir first.first 
#define fsec first.second 
#define sfir second.first 
#define ssec second.second 
#define Decimal fixed << setprecision(10) 

//int dxy[5] = {0, 1, 0, -1, 0}; 

int n;
int data[300];
int dp[300][301]; // hankai
int score[300][301];

void make(int st, int en)
{
if (dp[st][en]) return;
dp[st][en] = 1;
if (0 <= st - 2 && abs(data[st-2] - data[st-1] ) < 2 ) {
make(st-2, en);
}
if (0 <= st - 1 && en < n && abs(data[st-1] - data[en]) < 2) {
make(st-1, en+1);
}
if (en + 1 < n && abs(data[en] - data[en+1]) < 2) {
make(st, en+2);
}
}

int solve(int st, int en)
{
if ( dp[st][en] ) return 0; 
if ( score[st][en] ) return score[st][en];
if (en - st < 2) return en - st;
int ret = en - st;
for (int i = st+2; i < en; i++) {
if (dp[st][i]) {
ret = min(solve(i-1, en), ret)
}
}
return score[st][en] = min(ret, 1+solve(st+1, en));
}

signed main() 
{ 
std::ios::sync_with_stdio(false); 
std::cin.tie(0); 

cin >> n;
while ( n ) {
memset(data, 0, sizeof(data))
memset(dp, 0, sizeof(dp));
rep(i, n) cin >> data[i];
rep(i, n-1) if ( abs(data[i] - data[i+1]) < 2 )
make(i, i+2);
cout << n - solve(0, n) <<endl;
cin >> n;
}

return 0; 
}


Compiler output:
a.cc: In function 'void make(long long int, long long int)':
a.cc:43:24: error: reference to 'data' is ambiguous
   43 | if (0 <= st - 2 && abs(data[st-2] - data[st-1] ) < 2 ) {
      |                        ^~~~
In file included from /usr/include/c++/14/string:53,
                 from /usr/include/c++/14/bitset:52,
                 from /usr/include/x86_64-linux-gnu/c++/14/bits/stdc++.h:52,
                 from a.cc:1:
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:43:37: error: reference to 'data' is ambiguous
   43 | if (0 <= st - 2 && abs(data[st-2] - data[st-1] ) < 2 ) {
      |                                     ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:46:34: error: reference to 'data' is ambiguous
   46 | if (0 <= st - 1 && en < n && abs(data[st-1] - data[en]) < 2) {
      |                                  ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:46:47: error: reference to 'data' is ambiguous
   46 | if (0 <= st - 1 && en < n && abs(data[st-1] - data[en]) < 2) {
      |                                               ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:49:23: error: reference to 'data' is ambiguous
   49 | if (en + 1 < n && abs(data[en] - data[en+1]) < 2) {
      |                       ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:49:34: error: reference to 'data' is ambiguous
   49 | if (en + 1 < n && abs(data[en] - data[en+1]) < 2) {
      |                                  ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc: In function 'long long int solve(long long int, long long int)':
a.cc:62:31: error: expected ';' before '}' token
   62 | ret = min(solve(i-1, en), ret)
      |                               ^
      |                               ;
   63 | }
      | ~                              
a.cc: In function 'int main()':
a.cc:75:8: error: reference to 'data' is ambiguous
   75 | memset(data, 0, sizeof(data))
      |        ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:75:24: error: reference to 'data' is ambiguous
   75 | memset(data, 0, sizeof(data))
      |                        ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: candidates are: 'template<class _Tp> constexpr const _Tp* std::data(initializer_list<_Tp>)'
  344 |     data(initializer_list<_Tp> __il) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:334:5: note:                 'template<class _Tp, long unsigned int _Nm> constexpr _Tp* std::data(_Tp (&)[_Nm])'
  334 |     data(_Tp (&__array)[_Nm]) noexcept
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:323:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(const _Container&)'
  323 |     data(const _Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
/usr/include/c++/14/bits/range_access.h:312:5: note:                 'template<class _Container> constexpr decltype (__cont.data()) std::data(_Container&)'
  312 |     data(_Container& __cont) noexcept(noexcept(__cont.data()))
      |     ^~~~
a.cc:35:5: note:                 'long long int data [300]'
   35 | int data[300];
      |     ^~~~
a.cc:77:18: error: reference to 'data' is ambiguous
   77 | rep(i, n) cin >> data[i];
      |                  ^~~~
/usr/include/c++/14/bits/range_access.h:344:5: note: can