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

#include <bits/stdc++.h>
typedef long long ll;
#define REP(i, n) for (int i = 0; i < n; i++)
#define REP2(i, a, b) for (int i = a; i <= b; i++)
#define REPR(i, a, b) for (int i = a; i >= b; i--)
#define FOR(i, m, n) for (int i = m; i < n; i++)
#define INF 2e18
#define MOD 1000000007
#define PI 3.14159265358979323846
#define vi vector<int>
#define vll vector<ll>
#define vi2 vector<vector<int>>
#define eb emplace_back
#define fi first
#define se second
#define ALL(v) v.begin(), v.end()
#define sz(x) int(x.size())
using namespace std;
using P = pair<ll, ll>;
const int dx[]{0, 1, 0, -1, -1, -1, 1, 1}, dy[]{1, 0, -1, 0, -1, 1, -1, 1};
#define INT(name)                                                              \\
  int name;                                                                    \\
  cin >> name;
#define VEC(type, name, n)                                                     \\
  vector<type> name(n);                                                        \\
  REP(i, n) cin >> name[i];

template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}

ll A, B, C, D;
map<ll, ll> memo;
ll solve(ll N) {
  if (N == 0)
    return 0;
  if (N == 1)
    return D;
  if (memo.count(N))
    return memo[N];
  ll ret = INF;
  if (N < ret / D)
    ret = N * D;
  if (N % 2 == 0) {
    chmin(ret, solve(N / 2) + A);
  }
  if (N % 2 == 1) {
    chmin(ret, solve(N / 2) + A + D);
    chmin(ret, solve(N / 2 + 1) + A + D);
  }
  if (N % 3 == 0) {
    chmin(ret, solve(N / 3) + B);
  }
  if (N % 3 == 1) {
    chmin(ret, solve(N / 3) + B + D);
    chmin(ret, solve(N / 3 + 1) + B + D * 2);
  }
  if (N % 3 == 2) {
    chmin(ret, solve(N / 3) + B + D * 2);
    chmin(ret, solve(N / 3 + 1) + B + D);
  }
  if (N % 5 == 0) {
    chmin(ret, solve(N / 5) + C);
  }
  if (N % 5 == 1) {
    chmin(ret, solve(N / 5) + C + D);
    chmin(ret, solve(N / 5 + 1) + C + D * 4);
  }
  if (N % 5 == 2) {
    chmin(ret, solve(N / 5) + C + D * 2);
    chmin(ret, solve(N / 5 + 1) + C + D * 3);
  }
  if (N % 5 == 3) {
    chmin(ret, solve(N / 5) + C + D * 3);
    chmin(ret, solve(N / 5 + 1) + C + D * 2);
  }
  if (N % 5 == 4) {
    chmin(ret, solve(N / 5) + C + D * 4);
    chmin(ret, solve(N / 5 + 1) + C + D);
  }
  memo[N] = ret;
  return ret;
}

int main() {
  INT(T);
  REP(i, T) {
    memo.clear();
    ll N;
    cin >> N >> A >> B >> C >> D;
    cout << solve(N) << endl;
  }
}


Error: -11

Fixed submission:

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; i < n; i++)
#define REPR(i, n) for (int i = n; i >= 0; i--)
#define FOR(i, m, n) for (int i = m; i < n; i++)
#define INF 1e18
#define MOD 1000000007
#define ALL(v) v.begin(), v.end()
using namespace std;
typedef long long ll;
using P = pair<int, int>;
template <class T> inline bool chmin(T &a, T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <class T> inline bool chmax(T &a, T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
ll dp[1000100];
// ll mincoin(ll y,ll A,ll B,ll C,ll D,ll dp[]){
//         ll MIN = INF;
//         if(y<=100000){
//           return dp[y];
//         }
//         if(y%2==0){
//           MIN = min(MIN,mincoin(y/2,A,B,C,D,dp)+A);
//         }else{
//           MIN = min(MIN,mincoin(y/2,A,B,C,D,dp)+A+D);
//         }
//         if(y%3==0){
//           MIN = min(MIN,mincoin(y/3,A,B,C,D,dp)+B);
//         }else if(y%3==1){
//           MIN = min(MIN,mincoin(y/3,A,B,C,D,dp)+B+D);
//           MIN = min(MIN,mincoin((y+1)/3,A,B,C,D,dp)+B+D+D);
//         }else if(y%3==2){
//           MIN = min(MIN,mincoin(y/3,A,B,C,D,dp)+B+D+D);
//           MIN = min(MIN,mincoin((y+1)/3,A,B,C,D,dp)+B+D);
//         }
//         if(y%5==0){
//           MIN = min(MIN,mincoin(y/5,A,B,C,D,dp)+C);
//         }else if(y%5==1){
//           MIN = min(MIN,mincoin(y/5,A,B,C,D,dp)+D+C);
//           MIN = min(MIN,mincoin((y+1)/5,A,B,C,D,dp)+D+D+D+D+C);
//         }else if(y%5==2){
//           MIN = min(MIN,mincoin(y/5,A,B,C,D,dp)+D+D+C);
//           MIN = min(MIN,mincoin((y+1)/5,A,B,C,D,dp)+D+D+D+C);
//         }else if(y%5==3){
//           MIN = min(MIN,mincoin(y/5,A,B,C,D,dp)+D+D+D+C);
//           MIN = min(MIN,mincoin((y+1)/5,A,B,C,D,dp)+D+D+C);
//         }else if(y%5==4){
//           MIN = min(MIN,mincoin(y/5,A,B,C,D,dp)+D+D+D+D+C);
//           MIN = min(MIN,mincoin((y+1)/5,A,B,C,D,dp)+D+C);
//         }
//         return MIN;
//       }
int main() {
  int T;
  cin >> T;
  vector<ll> ans;

  REP(i, T) {
    ll N, A, B, C, D;
    cin >> N >> A >> B >> C >> D;
    REP(i, 100010) { dp[i] = INF; }
    dp[0] = 0;
    dp[1] = D;
    // if(N<=100000){
    FOR(i, 1, N + 5) {
      chmin(dp[i + 1], dp[i] + D);
      chmin(dp[i - 1], dp[i] + D);
      chmin(dp[i * 2], dp[i] + A);
      chmin(dp[i * 3], dp[i] + B);
      chmin(dp[i * 5], dp[i] + C);
    }
    ans.push_back(dp[N]);
    // }else{
    //   FOR(i,1,100005){
    //     chmin(dp[i+1],dp[i]+D);
    //     chmin(dp[i-1],dp[i]+D);
    //     chmin(dp[i*2],dp[i]+A);
    //     chmin(dp[i*3],dp[i]+B);
    //     chmin(dp[i*5],dp[i]+C);
    //   }
    //   ans.push_back(mincoin(N,A,B,C,D,dp));
    // }
  }

  for (auto x : ans) {
    cout << x << endl;
  }
}