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

#include <bits/stdc++.h>
using namespace std;
using pint = pair<int, int>;
using ll = long long;
using ull = unsigned long long;
using vll = vector<long long>;
using pll = pair<ll, ll>;
#define FOR(i, begin, end)                                                     \\
  for (int i = (begin), i##_end_ = (end); i < i##_end_; i++)
#define IFOR(i, begin, end)                                                    \\
  for (int i = (end)-1, i##_begin_ = (begin); i >= i##_begin_; i--)
#define REP(i, n) FOR(i, 0, n)
#define IREP(i, n) IFOR(i, 0, n)
#define VREP(s, ite) for (auto ite = s.begin(); ite != s.end(); ++ite)
#define FI first
#define SE second
#define ALL(v) v.begin(), v.end()
#define endl "\\n"
#define ciosup                                                                 \\
  cin.tie(0);                                                                  \\
  ios::sync_with_stdio(false);
#define eb emplace_back
#define vint vector<int>
constexpr ll INF = 1e15 + 7LL;
constexpr ll MOD = 1e9 + 7LL;
template <typename T> istream &operator>>(istream &is, vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) {
    is >> v[i];
  }
  return is;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  if (v.size() == 0)
    return os;
  for (int i = 0; i < v.size() - 1; ++i) {
    os << v[i] << " ";
  }
  os << v[v.size() - 1];
  return os;
}

void solve() {
  int r, c, k;
  cin >> r >> c >> k;
  vector<vll> G(r, vll(c, 0));
  REP(i, k) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    cin >> G[a][b];
  }
  vector<vector<vll>> dp(4, vector<vll>(r + 1, vll(c + 1, 0)));
  REP(i, r) {
    REP(j, c) {
      REP(k, 4) {
        /* dp[k][i][j+1] = max(dp[k][i][j+1], dp[k][i][j]); */
        /* dp[k][i+1][j] = max(dp[k][i+1][j], dp[k][i][j]); */
        /* dp[0][i+1][j+1] = max(dp[0][i+1][j+1], dp[k][i+1][j]); */

        dp[0][i + 1][j + 1] = max(dp[0][i + 1][j + 1], dp[k][i][j + 1]);
        if (G[i][j] > 0)
          dp[1][i + 1][j + 1] =
              max(dp[1][i + 1][j + 1], dp[k][i][j + 1] + G[i][j]);
        /* REP(k2, 4) { */
        /*     dp[k][i+1][j+1] = max(dp[k][i+1][j+1], dp[k2][i][j+1]); */
        /*     if (G[i][j] > 0 && k >= 1) dp[k][i+1][j+1] = max(dp[k][i+1][j+1],
         * dp[k2][i][j+1]+G[i][j]); */
        /* } */
        dp[k][i + 1][j + 1] = max(dp[k][i + 1][j + 1], dp[k][i + 1][j]);
        if (G[i][j] > 0 && k + 1 <= 3)
          dp[k + 1][i + 1][j + 1] =
              max(dp[k + 1][i + 1][j + 1], dp[k][i + 1][j] + G[i][j]);
      }
    }
  }
  cout << max(dp[0][r][c], max(dp[1][r][c], max(dp[2][r][c], dp[3][r][c])))
       << endl;
}

int main() {
  char tmp;
  while (cin >> tmp) {
    cin.putback(tmp);
    solve();
  }
}


Error: 0

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
using pint = pair<int, int>;
using ll = long long;
using ull = unsigned long long;
using vll = vector<long long>;
using pll = pair<ll, ll>;
#define FOR(i, begin, end)                                                     \\
  for (int i = (begin), i##_end_ = (end); i < i##_end_; i++)
#define IFOR(i, begin, end)                                                    \\
  for (int i = (end)-1, i##_begin_ = (begin); i >= i##_begin_; i--)
#define REP(i, n) FOR(i, 0, n)
#define IREP(i, n) IFOR(i, 0, n)
#define VREP(s, ite) for (auto ite = s.begin(); ite != s.end(); ++ite)
#define FI first
#define SE second
#define ALL(v) v.begin(), v.end()
#define endl "\\n"
#define ciosup                                                                 \\
  cin.tie(0);                                                                  \\
  ios::sync_with_stdio(false);
#define eb emplace_back
#define vint vector<int>
constexpr ll INF = 1e15 + 7LL;
constexpr ll MOD = 1e9 + 7LL;
template <typename T> istream &operator>>(istream &is, vector<T> &v) {
  for (int i = 0; i < v.size(); ++i) {
    is >> v[i];
  }
  return is;
}
template <typename T> ostream &operator<<(ostream &os, const vector<T> &v) {
  if (v.size() == 0)
    return os;
  for (int i = 0; i < v.size() - 1; ++i) {
    os << v[i] << " ";
  }
  os << v[v.size() - 1];
  return os;
}

void solve() {
  int r, c, k;
  cin >> r >> c >> k;
  vector<vll> G(r, vll(c, 0));
  REP(i, k) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    cin >> G[a][b];
  }
  vector<vector<vll>> dp(4, vector<vll>(r + 1, vll(c + 1, 0)));
  REP(i, r) {
    REP(j, r) {
      REP(k, 4) {
        /* dp[k][i][j+1] = max(dp[k][i][j+1], dp[k][i][j]); */
        /* dp[k][i+1][j] = max(dp[k][i+1][j], dp[k][i][j]); */
        /* dp[0][i+1][j+1] = max(dp[0][i+1][j+1], dp[k][i+1][j]); */
        REP(k2, 4) {
          dp[0][i + 1][j + 1] = max(dp[0][i + 1][j + 1], dp[k2][i + 1][j]);
          if (G[i][j] > 0)
            dp[1][i + 1][j + 1] =
                max(dp[1][i + 1][j + 1], dp[k2][i + 1][j] + G[i][j]);
        }
        dp[k][i + 1][j + 1] = max(dp[k][i + 1][j + 1], dp[k][i][j + 1]);
        if (G[i][j] > 0 && k + 1 <= 3)
          dp[k + 1][i + 1][j + 1] =
              max(dp[k][i + 1][j + 1], dp[k][i][j + 1] + G[i][j]);
      }
    }
  }
  cout << max(dp[0][r][c], max(dp[1][r][c], max(dp[2][r][c], dp[3][r][c])))
       << endl;
}

int main() {
  char tmp;
  while (cin >> tmp) {
    cin.putback(tmp);
    solve();
  }
}