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

#include <bits/stdc++.h>
using namespace std;
// Optimisations
#pragma GCC target("avx2")
#pragma GCC optimization("unroll-loops")
#pragma GCC optimize("O2")
// shortcuts for functions
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define prec(n) fixed << setprecision(n)
#define n_l '\\n'
// make it python
#define gcd __gcd
#define append push_back
#define str to_string
// utility functions shortcuts
#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))
#define sswap(a, b)                                                            \\
  {                                                                            \\
    a = a ^ b;                                                                 \\
    b = a ^ b;                                                                 \\
    a = a ^ b;                                                                 \\
  }
#define swap(a, b)                                                             \\
  {                                                                            \\
    auto temp = a;                                                             \\
    a = b;                                                                     \\
    b = temp;                                                                  \\
  }
#define init(dp) memset(dp, -1, sizeof(dp));
#define set0(dp) memset(dp, 0, sizeof(dp));
#define bits(x) __builtin_popcount(x)
#define SORT(v) sort(all(v))
#define endl "\\n"
#define forr(i, n) for (ll i = 0; i < n; i++)
// declaration shortcuts
typedef long long int ll;
#define int ll
// Constants
constexpr int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};
constexpr ll INF = 1999999999999999997;
constexpr int inf = INT_MAX;
constexpr int MAXSIZE = int(1e6) + 5;
constexpr auto PI = 3.14159265358979323846L;
constexpr auto oo = numeric_limits<int>::max() / 2 - 2;
constexpr auto eps = 1e-6;
constexpr auto mod = 1000000007;
constexpr auto MOD = 1000000007;
constexpr auto MOD9 = 1000000009;
constexpr auto maxn = 100006;
// void IOfile(){
// freopen(file_name, reade_mode, stdin);
// freopen(file_name, write_mode, stdout);
// }
void fastio() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}
int a[3002][3002];
int dp[3003][3002][4];

int32_t main() {
  fastio();
  int r, c, k;
  cin >> r >> c >> k;

  for (int i = 1; i <= k; i++) {
    int x, y, c;
    cin >> x >> y >> c;
    a[x][y] = c;
  }
  for (int i = 1; i <= r; i++) {
    for (int j = 1; j <= c; j++) {
      for (int k = 0; k <= 3; k++) {
        dp[i][j][0] = max(dp[i][j][0], dp[i - 1][j][k]);
        dp[i][j][1] = max(dp[i][j][1], a[i][j] + dp[i - 1][j][k]);
      }
      dp[i][j][0] = max(dp[i][j][0], dp[i][j - 1][0]);
      for (int k = 1; k <= 3; k++) {
        dp[i][j][k] =
            max({dp[i][j][k], a[i][j] + dp[i][j - 1][k - 1], dp[i][j - 1][k]});
      }
    }
  }
  cout << max({dp[r][c][0], dp[r][c][1], dp[r][c][2], dp[r][c][3]});
}

Error: WA

Fixed submission:

#include <bits/stdc++.h>
using namespace std;
// Optimisations
#pragma GCC target("avx2")
#pragma GCC optimization("unroll-loops")
#pragma GCC optimize("O2")
// shortcuts for functions
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define all(v) v.begin(), v.end()
#define prec(n) fixed << setprecision(n)
#define n_l '\\n'
// make it python
#define gcd __gcd
#define append push_back
#define str to_string
// utility functions shortcuts
#define max3(a, b, c) max(a, max(b, c))
#define min3(a, b, c) min(a, min(b, c))
#define sswap(a, b)                                                            \\
  {                                                                            \\
    a = a ^ b;                                                                 \\
    b = a ^ b;                                                                 \\
    a = a ^ b;                                                                 \\
  }
#define swap(a, b)                                                             \\
  {                                                                            \\
    auto temp = a;                                                             \\
    a = b;                                                                     \\
    b = temp;                                                                  \\
  }
#define init(dp) memset(dp, -1, sizeof(dp));
#define set0(dp) memset(dp, 0, sizeof(dp));
#define bits(x) __builtin_popcount(x)
#define SORT(v) sort(all(v))
#define endl "\\n"
#define forr(i, n) for (ll i = 0; i < n; i++)
// declaration shortcuts
typedef long long int ll;
#define int ll
// Constants
constexpr int dx[] = {-1, 0, 1, 0, 1, 1, -1, -1};
constexpr int dy[] = {0, -1, 0, 1, 1, -1, 1, -1};
constexpr ll INF = 1999999999999999997;
constexpr int inf = INT_MAX;
constexpr int MAXSIZE = int(1e6) + 5;
constexpr auto PI = 3.14159265358979323846L;
constexpr auto oo = numeric_limits<int>::max() / 2 - 2;
constexpr auto eps = 1e-6;
constexpr auto mod = 1000000007;
constexpr auto MOD = 1000000007;
constexpr auto MOD9 = 1000000009;
constexpr auto maxn = 100006;
// void IOfile(){
// freopen(file_name, reade_mode, stdin);
// freopen(file_name, write_mode, stdout);
// }
void fastio() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
}

int32_t main() {
  fastio();
  int r, c, k;
  cin >> r >> c >> k;
  int a[r + 1][c + 1];
  int dp[r + 1][c + 1][4];
  memset(dp, 0, sizeof(dp));
  memset(a, 0, sizeof(a));
  for (int i = 1; i <= k; i++) {
    int x, y, c;
    cin >> x >> y >> c;
    a[x][y] = c;
  }
  for (int i = 1; i <= r; i++) {
    for (int j = 1; j <= c; j++) {
      for (int k = 0; k <= 3; k++) {
        dp[i][j][0] = max(dp[i][j][0], dp[i - 1][j][k]);
        dp[i][j][1] = max(dp[i][j][1], a[i][j] + dp[i - 1][j][k]);
      }
      dp[i][j][0] = max(dp[i][j][0], dp[i][j - 1][0]);
      for (int k = 1; k <= 3; k++) {
        dp[i][j][k] =
            max({dp[i][j][k], a[i][j] + dp[i][j - 1][k - 1], dp[i][j - 1][k]});
      }
    }
  }
  cout << max({dp[r][c][0], dp[r][c][1], dp[r][c][2], dp[r][c][3]});
}