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

#include <bits/stdc++.h> //Carefully Crafted by hetp111
using namespace std;
#define int long long
#define double long double
#define all(v) (v).begin(), (v).end()
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int, int>
#define vii vector<pii>
#define MOD 1000000007
#define MOD2 998244353
#define MOD3 1000000009
#define PI acos(-1)
#define eps (1e-8)
#define INF (1e18)
#define FASTER                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0)
template <class A, class B>
ostream &operator<<(ostream &out, const pair<A, B> &a) {
  return out << "(" << a.first << "," << a.second << ")";
}
template <class A> ostream &operator<<(ostream &out, const vector<A> &a) {
  for (const A &it : a)
    out << it << " ";
  return out;
}
template <class A, class B> istream &operator>>(istream &in, pair<A, B> &a) {
  return in >> a.first >> a.second;
}
template <class A> istream &operator>>(istream &in, vector<A> &a) {
  for (A &i : a)
    in >> i;
  return in;
}
ifstream cinn("in.in");
ofstream coutt("out.out");
int poww(const int &a, int b, const int &m = MOD) {
  if (b == 0)
    return 1;
  int x = poww(a, b / 2, m);
  x = x * x % m;
  if (b & 1)
    x = x * a % m;
  return x;
}
int ceil(const int &a, const int &b) { return (a + b - 1) / b; }
////Read:
// Check corner cases, n==1;
//
////Some function:
//__builtin_popcountll(), is_sorted(),

int n;
vi v;

signed main() {
  FASTER;
  cin >> n;
  v = vi(n);
  cin >> v;

  int p = 1000, st = 0;

  for (int i = 0; i < n; i++) {
    int s = i;
    while (i + 1 < n && v[i] <= v[i + 1])
      i++;
    int e = i;

    if (e - s + 1 > 1) {
      int pp = p;
      p -= (pp / v[s]) * v[s];
      st += (pp / v[s]);

      p += st * v[e];
      st = 0;
    }
  }

  cout << p;
}


Error: -11

Fixed submission:

#include <bits/stdc++.h> //Carefully Crafted by hetp111
using namespace std;
#define int long long
#define double long double
#define all(v) (v).begin(), (v).end()
#define vi vector<int>
#define vvi vector<vi>
#define pii pair<int, int>
#define vii vector<pii>
#define MOD 1000000007
#define MOD2 998244353
#define MOD3 1000000009
#define PI acos(-1)
#define eps (1e-8)
#define INF (1e18)
#define FASTER                                                                 \\
  ios_base::sync_with_stdio(0);                                                \\
  cin.tie(0)
template <class A, class B>
ostream &operator<<(ostream &out, const pair<A, B> &a) {
  return out << "(" << a.first << "," << a.second << ")";
}
template <class A> ostream &operator<<(ostream &out, const vector<A> &a) {
  for (const A &it : a)
    out << it << " ";
  return out;
}
template <class A, class B> istream &operator>>(istream &in, pair<A, B> &a) {
  return in >> a.first >> a.second;
}
template <class A> istream &operator>>(istream &in, vector<A> &a) {
  for (A &i : a)
    in >> i;
  return in;
}
ifstream cinn("in.in");
ofstream coutt("out.out");
int poww(const int &a, int b, const int &m = MOD) {
  if (b == 0)
    return 1;
  int x = poww(a, b / 2, m);
  x = x * x % m;
  if (b & 1)
    x = x * a % m;
  return x;
}
int ceil(const int &a, const int &b) { return (a + b - 1) / b; }
////Read:
// Check corner cases, n==1;
//
////Some function:
//__builtin_popcountll(), is_sorted(),

int n, dp[80][2001][201];
vi v;

int f(int i, int bal, int stk) {
  if (bal < 0)
    return -INF;
  if (i == n)
    return bal;
  int &ans = dp[i][bal][stk];
  if (ans != -1)
    return ans;

  ans = 0;
  for (int j = 0; j <= bal / v[i]; j++) {
    for (int k = 0; k <= stk; k++) {
      ans = max(ans, f(i + 1, bal - j * v[i] + k * v[i], stk + j - k));
    }
  }

  return ans;
}

signed main() {
  FASTER;
  memset(dp, -1, sizeof dp);
  cin >> n;
  v = vi(n);
  cin >> v;
  cout << f(0, 1000, 0);
}