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

// #include <bits/stdc++.h>
// #define rep(i,a,b) for(ll i=a;i<b;i++)
// #define rrep(i,b,a) for(ll i=b;i>=a;i--)
// #define fori(a) for(auto i : a )
// #define all(a) begin(a), end(a)
// #define set(a,b) memset(a,b,sizeof(a))
// #define sz(a) a.size()
// #define pi 3.14159
// #define ll long long
// #define ull unsigned long long
// #define pb push_back
// #define PF push_front //deque
// #define mp make_pair
// #define pq priority_queue
// #define mod 1000000007
// #define f first
// #define s second
// #define pii pair< ll, ll >
// #define vi vector<ll>
// #define vpii vector<pii>
// #define debug(v) for(auto i:v) cout<<i<<" ";
// #define tc ll t; cin >> t; while(t--)
//
// using namespace std;
// string repeat(string s, ll n) {
//     string s1 = "";
//     for (ll i=0; i<n;i++)
//         s1+=s;
//     return s1;
// }
// string getString(char x) {
//     string s(1, x);
//     return s;
// }
//
// void optimizeIO(){
//     ios_base::sync_with_stdio(false);
//     cin.tie(NULL);
//     cout.tie(NULL);
// }
// ll gcd(ll a, ll b){
//     if (a == 0)  return b;
//     return gcd(b % a, a);
// }
// const int N=3005;
// vector<vector<ll>> a(N,vector<ll>(N,0));
// ll dp[N][N][4];
// void solve(){
//   ll r,c,k,x,y,v;
//   cin>>r>>c>>k;
//   rep(i,0,k){
//     cin>>x>>y>>v;
//     a[x-1][y-1]=v;
//   }
//   rep(i,0,r) rep(k,0,4)dp[i][0][k]=0;
//   rep(i,0,c) rep(k,0,4) dp[0][i][k]=0;
//   dp[0][0][0]=a[0][0];
//   rep(i,1,c){
//     vector<ll> v1={dp[0][i-1][0],dp[0][i-1][1],dp[0][i-1][2],a[0][i]};
//     sort(all(v1),greater<ll>());
//     rep(k,0,3) dp[0][i][k]=v1[k];
//   }
//   rep(i,1,r){
//     ll sum1=(dp[i-1][0][0]+dp[i-1][0][1]+dp[i-1][0][2]+dp[i-1][0][3]);
//     dp[i][0][0]=a[i][0];
//     dp[i][0][3]=sum1;
//   }
//   rep(i,1,r){
//     rep(j,1,c){
//       ll sum=dp[i][j-1][0]+dp[i][j-1][1]+dp[i][j-1][2]+dp[i][j-1][3];
//       ll sum1=(dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2]+dp[i-1][j][3]);
//       if(sum>sum1 ){
//         vector<ll> v1={dp[i][j-1][0],dp[i][j-1][1],dp[i][j-1][2],a[i][j]};
//         sort(all(v1),greater<ll>());
//         rep(k,0,3) dp[i][j][k]=v1[k];
//         dp[i][j][3]=dp[i][j-1][3];
//       }
//       else{
//         dp[i][j][0]=a[i][j];
//         rep(k,1,3) dp[i][j][k]=0;
//         dp[i][j][3]=sum1;
//       }
//     }
//   }
//   cout<<dp[r-1][c-1][0]+dp[r-1][c-1][1]+dp[r-1][c-1][2]+dp[r-1][c-1][3]<<endl;
// }
// int main(){
//     optimizeIO();
//     // tc
//     { solve();
//     }
// }

#ifndef LOCAL
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("unroll-loops")
#endif
#include "bits/stdc++.h"
#include <ext/pb_ds/assoc_container.hpp> // Common file
#include <ext/pb_ds/detail/standard_policies.hpp>
#include <ext/pb_ds/tree_policy.hpp> // Including tree_order_statistics_node_update
using namespace std;
using namespace __gnu_pbds;
#define sim template <class c
#define int long long
#define ris return *this
#define dor > debug &operator<<
#define eni(x)                                                                 \\
  sim > typename enable_if<sizeof dud<c>(0) x 1, debug &>::type operator<<(    \\
            c i) {
sim > struct rge {
  c b, e;
};
sim > rge<c> range(c i, c j) { return rge<c>{i, j}; }
sim > auto dud(c *x) -> decltype(cerr << *x, 0);
sim > char dud(...);
struct debug {
#ifdef LOCAL
  ~debug() { cerr << '\\n'; }
  eni(!=) cerr << boolalpha << i;
  ris;
} eni(==) ris << range(begin(i), end(i));
}
sim, class b dor(pair<b, c> d) {
  ris << "(" << d.first << ", " << d.second << ")";
}
sim dor(rge<c> d) {
  *this << "[";
  for (auto it = d.b; it != d.e; ++it)
    *this << ", " + 2 * (it == d.b) << *it;
  ris << "]";
}
#else
  sim dor(const c &) { ris; }
#endif
}
;
#define imie(...) " [" << #__VA_ARGS__ ": " << (__VA_ARGS__) << "] "
#define fastio                                                                 \\
  ios_base::sync_with_stdio(false);                                            \\
  cin.tie(0);
typedef tree<pair<int, int>, null_type, less<pair<int, int>>, rb_tree_tag,
             tree_order_statistics_node_update>
    ordered_set;
typedef long long ll;
const ll MOD = 1e9 + 7;
const ll N = 2e5 + 10;
const ll INF = 1e18 + 10;
int n, m, k;
int a[3001][3001];
int dp[3001][3001][4];
int dfs(int x, int y, int cur) {
  if (x == n && y == m) {
    return 0;
  }
  if (x == n)
    return 0;
  if (y == m)
    return 0;
  if (dp[x][y][cur] != -1)
    return dp[x][y][cur];
  int ans = 0;
  if (a[x][y] == 0) {
    ans = max(dfs(x + 1, y, 0), dfs(x, y + 1, cur));
  } else {
    int value = a[x][y];
    if (cur < 3) {
      ans = max(ans, value + dfs(x, y + 1, cur + 1));
      ans = max(ans, value + dfs(x + 1, y, 0));
    }
    ans = max(ans, dfs(x, y + 1, cur));
    ans = max(ans, dfs(x + 1, y, 0));
  }
  return dp[x][y][cur] = ans;
}
signed main() {
  fastio memset(dp, -1, sizeof dp);
  cin >> n >> m >> k;
  for (int i = 0; i < k; i++) {
    int x, y, z;
    cin >> x >> y >> z;
    x--, y--;
    a[x][y] = z;
  }
  int ans = dfs(0, 0, 0);
  cout << ans << endl;
  return 0;
}


Error: WA

Fixed submission:

#include <bits/stdc++.h>
#define rep(i, a, b) for (ll i = a; i < b; i++)
#define rrep(i, b, a) for (ll i = b; i >= a; i--)
#define fori(a) for (auto i : a)
#define all(a) begin(a), end(a)
#define set(a, b) memset(a, b, sizeof(a))
#define sz(a) a.size()
#define pi 3.14159
#define ll long long
#define ull unsigned long long
#define pb push_back
#define PF push_front // deque
#define mp make_pair
#define pq priority_queue
#define mod 1000000007
#define f first
#define s second
#define pii pair<ll, ll>
#define vi vector<ll>
#define vpii vector<pii>
#define debug(v)                                                               \\
  for (auto i : v)                                                             \\
    cout << i << " ";
#define tc                                                                     \\
  ll t;                                                                        \\
  cin >> t;                                                                    \\
  while (t--)

using namespace std;
string repeat(string s, ll n) {
  string s1 = "";
  for (ll i = 0; i < n; i++)
    s1 += s;
  return s1;
}
string getString(char x) {
  string s(1, x);
  return s;
}

void optimizeIO() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
}
ll gcd(ll a, ll b) {
  if (a == 0)
    return b;
  return gcd(b % a, a);
}
void solve() {
  ll r, c, k, x, y, v;
  cin >> r >> c >> k;
  vector<vector<ll>> a(r, vector<ll>(c, 0));
  rep(i, 0, k) {
    cin >> x >> y >> v;
    a[x - 1][y - 1] = v;
  }
  ll dp[r][c][4];
  rep(i, 0, r) rep(k, 0, 4) dp[i][0][k] = 0;
  rep(i, 0, c) rep(k, 0, 4) dp[0][i][k] = 0;
  dp[0][0][0] = a[0][0];
  rep(i, 1, c) {
    vector<ll> v1 = {dp[0][i - 1][0], dp[0][i - 1][1], dp[0][i - 1][2],
                     a[0][i]};
    sort(all(v1), greater<ll>());
    rep(k, 0, 3) dp[0][i][k] = v1[k];
  }
  rep(i, 1, r) {
    ll sum1 =
        (dp[i - 1][0][0] + dp[i - 1][0][1] + dp[i - 1][0][2] + dp[i - 1][0][3]);
    dp[i][0][0] = a[i][0];
    dp[i][0][3] = sum1;
  }
  // rep(i,1,r){
  //   rep(j,1,c){
  //     ll sum=dp[i][j-1][0]+dp[i][j-1][1]+dp[i][j-1][2]+dp[i][j-1][3];
  //     ll sum1=(dp[i-1][j][0]+dp[i-1][j][1]+dp[i-1][j][2]+dp[i-1][j][3]);
  //     if(sum>sum1 ){
  //       vector<ll> v1={dp[i][j-1][0],dp[i][j-1][1],dp[i][j-1][2],a[i][j]};
  //       sort(all(v1),greater<ll>());
  //       rep(k,0,3) dp[i][j][k]=v1[k];
  //       dp[i][j][3]=dp[i][j-1][3];
  //     }
  //     else{
  //       dp[i][j][0]=a[i][j];
  //       rep(k,1,3) dp[i][j][k]=0;
  //       dp[i][j][3]=sum1;
  //     }
  //   }
  // }
  cout << dp[r - 1][c - 1][0] + dp[r - 1][c - 1][1] + dp[r - 1][c - 1][2] +
              dp[r - 1][c - 1][3]
       << endl;
}
int main() {
  optimizeIO();
  // tc
  { solve(); }
}