Problem p03163 (C++)

Buggy submission (status: Runtime Error):

#include <bits/stdc++.h>
#include <dirent.h>
#include <stdlib.h>
using namespace std;
#define sp << " " <<
typedef vector<int> vi;
typedef vector<long int> vli;
typedef vector<long long int> vlli;
typedef long int li;
typedef long long int lli;
typedef vector<pair<int, int>> vpi;
typedef vector<pair<lli, lli>> vplli;
typedef unordered_map<int, int> ump;

int main() {
  int n, w;
  cin >> n >> w;
  vector<pair<long long int, int>> arr;
  // vector<int> value;

  for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    arr.push_back({b, a});
  }
  // sort(arr.begin(), arr.end());
  vector<vector<long long int>> dp(w + 1, vector<long long int>(n, -1));

  for (int i = 0; i < n; i++) {
    dp[0][i] = 0;
  }
  for (int i = 0; i < w + 1; i++) {
    if (arr[0].second <= i) {
      dp[i][0] = arr[0].first;
    } else {
      dp[i][0] = 0;
    }
  }
  // for(int i=0;i<w+1;i++){
  //     for(int j=0;j<n;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }

  for (int i = 1; i < n; i++) {
    for (int j = 1; j < w + 1; j++) {
      if (arr[i].second <= j) {
        // cout << "Entering" << i sp j << endl;
        // cout << dp[j][i-1] sp arr[i].first+dp[j-arr[i].second][i-1] << endl;
        dp[j][i] =
            max(dp[j][i - 1], arr[i].first + dp[j - arr[i].second][i - 1]);
      } else {
        dp[j][i] = dp[j][i - 1];
      }
    }
  }
  // for(int i=0;i<w+1;i++){
  //     for(int j=0;j<n;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }
  cout << dp[w][n - 1];

  return dp[w][n - 1];
}

Fixed submission:

#include <bits/stdc++.h>
#include <dirent.h>
#include <stdlib.h>
using namespace std;
#define sp << " " <<
typedef vector<int> vi;
typedef vector<long int> vli;
typedef vector<long long int> vlli;
typedef long int li;
typedef long long int lli;
typedef vector<pair<int, int>> vpi;
typedef vector<pair<lli, lli>> vplli;
typedef unordered_map<int, int> ump;

int main() {
  int n, w;
  cin >> n >> w;
  vector<pair<long long int, int>> arr;
  // vector<int> value;

  for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    arr.push_back({b, a});
  }
  // sort(arr.begin(), arr.end());
  vector<vector<long long int>> dp(w + 1, vector<long long int>(n, -1));

  for (int i = 0; i < n; i++) {
    dp[0][i] = 0;
  }
  for (int i = 0; i < w + 1; i++) {
    if (arr[0].second <= i) {
      dp[i][0] = arr[0].first;
    } else {
      dp[i][0] = 0;
    }
  }
  // for(int i=0;i<w+1;i++){
  //     for(int j=0;j<n;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }

  for (int i = 1; i < n; i++) {
    for (int j = 1; j < w + 1; j++) {
      if (arr[i].second <= j) {
        // cout << "Entering" << i sp j << endl;
        // cout << dp[j][i-1] sp arr[i].first+dp[j-arr[i].second][i-1] << endl;
        dp[j][i] =
            max(dp[j][i - 1], arr[i].first + dp[j - arr[i].second][i - 1]);
      } else {
        dp[j][i] = dp[j][i - 1];
      }
    }
  }
  // for(int i=0;i<w+1;i++){
  //     for(int j=0;j<n;j++){
  //         cout << dp[i][j] << " ";
  //     }
  //     cout << endl;
  // }
  cout << dp[w][n - 1];

  return 0;
}