Language: C++

#define _CRT_SECURE_NO_WARNINGS
#include <array>
#include <iostream>

namespace Program
{
    using namespace std;
    class Solver
    {
    private:
        // 荷物の個数 整数
        int N;

        // ナップサックの許容重量 整数
        int W;

        // 価値 v[i]
        array<long long int, 100> v;

        // 重さ w[i]
        array<long long int, 100> w;

    public:
        Solver()
        {
            cin.tie(0);
            ios::sync_with_stdio(false);

            cin >> N >> W;

            // 重量オーバー除外後 荷物の個数 整数
            int overN = 0;

            int tmpw, tmpv;

            cin >> tmpw >> tmpv;

            for (int i = 1; i <= N; i++)
            {
                if (W < tmpw) overN++;
                else
                {
                    w[i - overN - 1] = tmpw;
                    v[i - overN - 1] = tmpv;
                }

                if (i == N) break;
                cin >> tmpw >> tmpv;
            }
            N = N - overN;
        }

        void Solve()
        {
            // それぞれ荷物の重量が1000以内のときに使用するナップサック
            cout << knapsackW(w, v, N, W) << endl;
        }

        // それぞれ荷物の重量が1000以内のときに使用するナップサック
        long long int knapsackW(
            const array<long long int, 100> &w,   /* 重さ */
            const array<long long int, 100> &v,   /* 価値 */
            const long long int &numOfItems,      /* 荷物の個数 */
            const long long int &wUpperBound      /* 総重量の上限 */
            )
        {
            // 動的計画法
            array<array<long long int, 300>, 100> dp;

            long long int j;

            for (long i = 0; i < N; i++) dp[i].fill(0);

            /* 価値の総和の最大値 動的計画法 */
            for (long i = 0; i < numOfItems; i++)
            {
                for (j = 0; j <= wUpperBound; j++)
                {
                    if (w[i] <= j && dp[i][j] < dp[i][j - w[i]] + v[i])
                    {
                        dp[i + 1][j] = dp[i][j - w[i]] + v[i];
                    }
                    else {
                        dp[i + 1][j] = dp[i][j];
                    }
                }
            }

            // 最大価値
            return N == 0 ? 0 : dp[numOfItems][wUpperBound];
        }
    };
}

int main()
{
    // メモリリーク検出
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
        | _CRTDBG_DELAY_FREE_MEM_DF
        | _CRTDBG_CHECK_ALWAYS_DF
        | _CRTDBG_LEAK_CHECK_DF);

    // メンバ関数ポインタ取得
    void (Program::Solver::*pSolve)() = &Program::Solver::Solve;

    // コンストラクタ呼び出し
    Program::Solver obj;

    // .*演算子でアクセス
    (obj.*pSolve)();
    return 0;
}


Compiler output:
a.cc: In function 'int main()':
a.cc:98:20: error: '_CRTDBG_ALLOC_MEM_DF' was not declared in this scope
   98 |     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
      |                    ^~~~~~~~~~~~~~~~~~~~
a.cc:99:11: error: '_CRTDBG_DELAY_FREE_MEM_DF' was not declared in this scope
   99 |         | _CRTDBG_DELAY_FREE_MEM_DF
      |           ^~~~~~~~~~~~~~~~~~~~~~~~~
a.cc:100:11: error: '_CRTDBG_CHECK_ALWAYS_DF' was not declared in this scope
  100 |         | _CRTDBG_CHECK_ALWAYS_DF
      |           ^~~~~~~~~~~~~~~~~~~~~~~
a.cc:101:11: error: '_CRTDBG_LEAK_CHECK_DF' was not declared in this scope
  101 |         | _CRTDBG_LEAK_CHECK_DF);
      |           ^~~~~~~~~~~~~~~~~~~~~
a.cc:98:5: error: '_CrtSetDbgFlag' was not declared in this scope
   98 |     _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF
      |     ^~~~~~~~~~~~~~