Problem p02603 (C++) — buggy submission, verdict: Runtime Error

/*
क्षमाशील हो रिपु-समक्ष
तुम हुये विनत जितना ही
दुष्ट कौरवों ने तुमको
कायर समझा उतना ही।
*/
#include <bits/stdc++.h>
using namespace std;

#define int long long int
#define ull unsigned int
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define S(arr) sort(arr.begin(), arr.end());
#define all(p) p.begin(), p.end()
#define RS(arr) sort(arr.rbegin(), arr.rend());
#define R(arr) reverse(arr.begin(), arr.end());
#define pii pair<int, int>
#define vpi vector<pii>
#define vi vector<int>
#define vld vector<ld>
#define vvi vector<vector<int>>
#define vvvi vector<vvi>
#define vvpi vector<vector<pii>>
#define vs vector<string>
#define si set<int>
#define spi set<pii>
#define setbits(x) __builtin_popcountll(x)
#define zrobits(x) __builtin_ctzll(x)
#define mii map<int, int>
#define mci map<char, int>
#define mpi map<pii, int>
#define T                                                                      \\
  int tcf;                                                                     \\
  cin >> tcf;                                                                  \\
  while (tcf--)
#define que_max(t) priority_queue<t>
#define que_min(t) priority_queue<t, vector<t>, greater<t>>
#define endl "\\n"
#define dba(a, l, r)                                                           \\
  for (auto x : a)                                                             \\
    cout << x << " ";                                                          \\
  cout << endl;
#define db1(x) cout << #x " = " << x << endl;
#define db2(x, y) cout << #x " = " << x << " " << #y " = " << y << endl;
#define db3(x, y, z)                                                           \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define db4(x, y, z, w)                                                        \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << " " \\
       << #w " = " << w << endl;
#define db5(x, y, z, w, v)                                                     \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << " " \\
       << #w " = " << w << " " << #v " = " << v << endl;
#define db6(x, y, z, w, v, a) db3(a, y, x) db3(w, v, a)
#define p2d(v)                                                                 \\
  for (auto a : v) {                                                           \\
    for (auto b : a)                                                           \\
      cout << b << " ";                                                        \\
    cout << endl;                                                              \\
  }
#define p1d(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a << " ";                                                          \\
  cout << endl;
#define ppi(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a.ff << " " << a.ss << endl;

// #include <ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;
// typedef tree<int, null_type, less<int>, rb_tree_tag,
// tree_order_statistics_node_update> pbds;
//  // *( hsh.find_by_order(k) ) kth smallest, from 0
//  // hsh.order_of_key(k) num of ele str less than k
//  // change less to less_equal for multiset pbds

void read(int n = 10) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(n) << fixed;
#ifndef ONLINE_JUDGE
//     freopen("input.txt",  "r",  stdin);
//   freopen("output.txt", "w", stdout);
#endif
}

int M = 1e9 + 7;
int M1 = 998244353;
#define qqq 4000005
#define pi 3.14159265358979323851

int32_t main() {
  read();
  int n;
  cin >> n;
  vi arr(n);
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
  }
  int prev = arr[0];
  int sum = 0, left = 1000 % arr[0];
  int i = 1, stocks = 1000 / arr[0];
  while (i < n) {
    if (arr[i] <= arr[i - 1]) {
      left += stocks * arr[i - 1];
      stocks = left / arr[i];
      left = left % arr[i];
    }
    i++;
  }
  cout << left + stocks * arr[n - 1];
}

Error: -11

Fixed submission:

/*
क्षमाशील हो रिपु-समक्ष
तुम हुये विनत जितना ही
दुष्ट कौरवों ने तुमको
कायर समझा उतना ही।
*/
#include <bits/stdc++.h>
using namespace std;

#define int long long int
#define ull unsigned int
#define ld long double
#define pb push_back
#define ff first
#define ss second
#define S(arr) sort(arr.begin(), arr.end());
#define all(p) p.begin(), p.end()
#define RS(arr) sort(arr.rbegin(), arr.rend());
#define R(arr) reverse(arr.begin(), arr.end());
#define pii pair<int, int>
#define vpi vector<pii>
#define vi vector<int>
#define vld vector<ld>
#define vvi vector<vector<int>>
#define vvvi vector<vvi>
#define vvpi vector<vector<pii>>
#define vs vector<string>
#define si set<int>
#define spi set<pii>
#define setbits(x) __builtin_popcountll(x)
#define zrobits(x) __builtin_ctzll(x)
#define mii map<int, int>
#define mci map<char, int>
#define mpi map<pii, int>
#define T                                                                      \\
  int tcf;                                                                     \\
  cin >> tcf;                                                                  \\
  while (tcf--)
#define que_max(t) priority_queue<t>
#define que_min(t) priority_queue<t, vector<t>, greater<t>>
#define endl "\\n"
#define dba(a, l, r)                                                           \\
  for (auto x : a)                                                             \\
    cout << x << " ";                                                          \\
  cout << endl;
#define db1(x) cout << #x " = " << x << endl;
#define db2(x, y) cout << #x " = " << x << " " << #y " = " << y << endl;
#define db3(x, y, z)                                                           \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << endl;
#define db4(x, y, z, w)                                                        \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << " " \\
       << #w " = " << w << endl;
#define db5(x, y, z, w, v)                                                     \\
  cout << #x " = " << x << " " << #y " = " << y << " " << #z " = " << z << " " \\
       << #w " = " << w << " " << #v " = " << v << endl;
#define db6(x, y, z, w, v, a) db3(a, y, x) db3(w, v, a)
#define p2d(v)                                                                 \\
  for (auto a : v) {                                                           \\
    for (auto b : a)                                                           \\
      cout << b << " ";                                                        \\
    cout << endl;                                                              \\
  }
#define p1d(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a << " ";                                                          \\
  cout << endl;
#define ppi(v)                                                                 \\
  for (auto a : v)                                                             \\
    cout << a.ff << " " << a.ss << endl;

// #include <ext/pb_ds/assoc_container.hpp>
// using namespace __gnu_pbds;
// typedef tree<int, null_type, less<int>, rb_tree_tag,
// tree_order_statistics_node_update> pbds;
//  // *( hsh.find_by_order(k) ) kth smallest, from 0
//  // hsh.order_of_key(k) num of ele str less than k
//  // change less to less_equal for multiset pbds

void read(int n = 10) {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout << setprecision(n) << fixed;
#ifndef ONLINE_JUDGE
  freopen("input.txt", "r", stdin);
  freopen("output.txt", "w", stdout);
#endif
}

int M = 1e9 + 7;
int M1 = 998244353;
#define qqq 4000005
#define pi 3.14159265358979323851

int n;
vi arr;
vvvi dp;

int solve(int ind, int money, int stock) {
  if (ind == n - 1)
    return money + stock * arr[ind];
  if (dp[ind][money][stock] != -1)
    return dp[ind][money][stock];
  // buys
  int rs = solve(ind + 1, money % arr[ind], stock + (money / arr[ind]));
  // sell;
  rs = max(rs, solve(ind + 1, money + stock * arr[ind], 0));
  return dp[ind][money][stock] = rs;
}

int32_t main() {
  read();
  cin >> n;
  arr.resize(n);
  dp.resize(n, vvi(10000, vi(15, -1)));
  for (int i = 0; i < n; i++)
    cin >> arr[i];
  cout << solve(0, 1000, 0);
}