Problem p03163 (C++)

Buggy submission (status: Runtime Error):
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <complex>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#define rep(i, n) for (int i = 0; i < (n); i++)

using namespace std;
const int MAX = 100005;
const int INF = 1e9 + 7;
typedef long long ll;

ll dp[105][MAX] = {0};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0); // この2行はより速度を向上させる
  // 追加２, 以降 cin の入力元が 'input.txt' になる
  // 提出時に消す！！
  std::ifstream in("sample.txt");
  std::cin.rdbuf(in.rdbuf());

  int N, W;
  cin >> N >> W;

  vector<ll> w(N), v(N);
  rep(i, N) cin >> w[i] >> v[i];

  for (int i = 0; i < N; i++) {
    for (int j = 0; j <= W; j++) {
      dp[i + 1][j] = dp[i][j];
      if (j - w[i] >= 0) {
        dp[i + 1][j] = max(dp[i + 1][j], dp[i][j - w[i]] + v[i]);
      }
    }
  }
  cout << dp[N][W] << endl;

  return 0;
}


Fixed submission:
#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <cerrno>
#include <cfloat>
#include <ciso646>
#include <climits>
#include <clocale>
#include <cmath>
#include <complex>
#include <csetjmp>
#include <csignal>
#include <cstdarg>
#include <cstddef>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>

#include <deque>
#include <exception>
#include <fstream>
#include <functional>
#include <iomanip>
#include <ios>
#include <iosfwd>
#include <iostream>
#include <istream>
#include <iterator>
#include <limits>
#include <list>
#include <locale>
#include <map>
#include <memory>
#include <new>
#include <numeric>
#include <ostream>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <stdexcept>
#include <streambuf>
#include <string>
#include <typeinfo>
#include <utility>
#include <valarray>
#include <vector>
#define rep(i, n) for (int i = 0; i < (n); i++)

using namespace std;
const int MAX = 100005;
const int INF = 1e9 + 7;
typedef long long ll;

ll dp[105][MAX] = {0};
int main() {
  cin.tie(0);
  ios::sync_with_stdio(0); // この2行はより速度を向上させる
  // 追加２, 以降 cin の入力元が 'input.txt' になる
  // 提出時に消す！！
  // std::ifstream in("sample.txt");
  // std::cin.rdbuf(in.rdbuf());

  int N, W;
  cin >> N >> W;

  vector<ll> w(N), v(N);
  rep(i, N) cin >> w[i] >> v[i];

  for (int i = 0; i < N; i++) {
    for (int j = 0; j <= W; j++) {
      dp[i + 1][j] = dp[i][j];
      if (j - w[i] >= 0) {
        dp[i + 1][j] = max(dp[i + 1][j], dp[i][j - w[i]] + v[i]);
      }
    }
  }
  cout << dp[N][W] << endl;

  return 0;
}