#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main() {
    // 1. Data Input Sesuai Kasus Anda
    const int N = 5;                        // Jumlah item
    const vector<int> W = {5, 4, 7, 8, 10}; // Bobot
    const vector<int> V = {10, 5, 7, 12, 8}; // Nilai
    const int C = 20;                       // Kapasitas
 
    // 2. Inisialisasi Tabel DP
    // dp[w] = Nilai max untuk kapasitas 'w'
    vector<int> dp(C + 1, 0); 
 
    // 3. Algoritma Dynamic Programming
    for (int i = 0; i < N; i++) {
        int current_weight = W[i];
        int current_value = V[i];
 
        // Iterasi kapasitas dari C ke current_weight (PENTING untuk 0/1 Knapsack)
        for (int w = C; w >= current_weight; w--) {
            // dp[w] = max(TIDAK diambil, diambil)
            dp[w] = max(dp[w], current_value + dp[w - current_weight]);
        }
    }
 
    // 4. Output Hasil
    // Nilai maksimal berada di dp[C]
    cout << "Nilai Maksimal: " << dp[C] << endl;
 
    return 0;
}
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYWluKCkgewogICAgLy8gMS4gRGF0YSBJbnB1dCBTZXN1YWkgS2FzdXMgQW5kYQogICAgY29uc3QgaW50IE4gPSA1OyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEp1bWxhaCBpdGVtCiAgICBjb25zdCB2ZWN0b3I8aW50PiBXID0gezUsIDQsIDcsIDgsIDEwfTsgLy8gQm9ib3QKICAgIGNvbnN0IHZlY3RvcjxpbnQ+IFYgPSB7MTAsIDUsIDcsIDEyLCA4fTsgLy8gTmlsYWkKICAgIGNvbnN0IGludCBDID0gMjA7ICAgICAgICAgICAgICAgICAgICAgICAvLyBLYXBhc2l0YXMKCiAgICAvLyAyLiBJbmlzaWFsaXNhc2kgVGFiZWwgRFAKICAgIC8vIGRwW3ddID0gTmlsYWkgbWF4IHVudHVrIGthcGFzaXRhcyAndycKICAgIHZlY3RvcjxpbnQ+IGRwKEMgKyAxLCAwKTsgCgogICAgLy8gMy4gQWxnb3JpdG1hIER5bmFtaWMgUHJvZ3JhbW1pbmcKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgaW50IGN1cnJlbnRfd2VpZ2h0ID0gV1tpXTsKICAgICAgICBpbnQgY3VycmVudF92YWx1ZSA9IFZbaV07CiAgICAgICAgCiAgICAgICAgLy8gSXRlcmFzaSBrYXBhc2l0YXMgZGFyaSBDIGtlIGN1cnJlbnRfd2VpZ2h0IChQRU5USU5HIHVudHVrIDAvMSBLbmFwc2FjaykKICAgICAgICBmb3IgKGludCB3ID0gQzsgdyA+PSBjdXJyZW50X3dlaWdodDsgdy0tKSB7CiAgICAgICAgICAgIC8vIGRwW3ddID0gbWF4KFRJREFLIGRpYW1iaWwsIGRpYW1iaWwpCiAgICAgICAgICAgIGRwW3ddID0gbWF4KGRwW3ddLCBjdXJyZW50X3ZhbHVlICsgZHBbdyAtIGN1cnJlbnRfd2VpZ2h0XSk7CiAgICAgICAgfQogICAgfQoKICAgIC8vIDQuIE91dHB1dCBIYXNpbAogICAgLy8gTmlsYWkgbWFrc2ltYWwgYmVyYWRhIGRpIGRwW0NdCiAgICBjb3V0IDw8ICJOaWxhaSBNYWtzaW1hbDogIiA8PCBkcFtDXSA8PCBlbmRsOwoKICAgIHJldHVybiAwOwp9