#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// Fungsi untuk menghitung nilai maksimum Knapsack
int knapSack(int W, const vector<int>& wt, const vector<int>& val, int n) {
// Tabel DP untuk menyimpan nilai maksimum
vector<vector<int>> K(n + 1, vector<int>(W + 1));
for (int i = 0; i <= n; i++) {
for (int w = 0; w <= W; w++) {
if (i == 0 || w == 0) {
K[i][w] = 0;
} else if (wt[i - 1] <= w) {
// Maksimum dari (ambil item) atau (tidak ambil item)
K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
} else {
// Tidak ambil item
K[i][w] = K[i - 1][w];
}
}
}
return K[n][W];
}
// Implementasi dan Pengujian
int main() {
// Input
int n = 5;
vector<int> weights = {5, 4, 7, 8, 10}; // Berat: 5,4,7,8,10
vector<int> values = {10, 5, 7, 12, 8}; // Nilai: 10,5,7,12,8
int W = 20; // Kapasitas: 20
// Hitung Nilai Maksimum
int max_value = knapSack(W, weights, values, n);
// Output yang benar adalah 2 9
// (Item berat 5, 7, 8 dengan total nilai 10 + 7 + 12 = 2 9)
cout << max_value << endl; // Output: 2 9
// Jika Anda benar-benar memerlukan format "2 9" seperti yang Anda sebutkan,
// meskipun tidak sesuai dengan hasil Knapsack yang benar (2 9),
// Anda bisa mengganti baris di atas dengan:
// cout << "2 9" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIEZ1bmdzaSB1bnR1ayBtZW5naGl0dW5nIG5pbGFpIG1ha3NpbXVtIEtuYXBzYWNrCmludCBrbmFwU2FjayhpbnQgVywgY29uc3QgdmVjdG9yPGludD4mIHd0LCBjb25zdCB2ZWN0b3I8aW50PiYgdmFsLCBpbnQgbikgewogICAgLy8gVGFiZWwgRFAgdW50dWsgbWVueWltcGFuIG5pbGFpIG1ha3NpbXVtCiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IEsobiArIDEsIHZlY3RvcjxpbnQ+KFcgKyAxKSk7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgdyA9IDA7IHcgPD0gVzsgdysrKSB7CiAgICAgICAgICAgIGlmIChpID09IDAgfHwgdyA9PSAwKSB7CiAgICAgICAgICAgICAgICBLW2ldW3ddID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmICh3dFtpIC0gMV0gPD0gdykgewogICAgICAgICAgICAgICAgLy8gTWFrc2ltdW0gZGFyaSAoYW1iaWwgaXRlbSkgYXRhdSAodGlkYWsgYW1iaWwgaXRlbSkKICAgICAgICAgICAgICAgIEtbaV1bd10gPSBtYXgodmFsW2kgLSAxXSArIEtbaSAtIDFdW3cgLSB3dFtpIC0gMV1dLCBLW2kgLSAxXVt3XSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBUaWRhayBhbWJpbCBpdGVtCiAgICAgICAgICAgICAgICBLW2ldW3ddID0gS1tpIC0gMV1bd107CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gS1tuXVtXXTsKfQoKLy8gSW1wbGVtZW50YXNpIGRhbiBQZW5ndWppYW4KaW50IG1haW4oKSB7CiAgICAvLyBJbnB1dAogICAgaW50IG4gPSA1OwogICAgdmVjdG9yPGludD4gd2VpZ2h0cyA9IHs1LCA0LCA3LCA4LCAxMH07ICAvLyBCZXJhdDogNSw0LDcsOCwxMAogICAgdmVjdG9yPGludD4gdmFsdWVzID0gezEwLCA1LCA3LCAxMiwgOH07ICAvLyBOaWxhaTogMTAsNSw3LDEyLDgKICAgIGludCBXID0gMjA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gS2FwYXNpdGFzOiAyMAoKICAgIC8vIEhpdHVuZyBOaWxhaSBNYWtzaW11bQogICAgaW50IG1heF92YWx1ZSA9IGtuYXBTYWNrKFcsIHdlaWdodHMsIHZhbHVlcywgbik7CgogICAgLy8gT3V0cHV0IHlhbmcgYmVuYXIgYWRhbGFoIDIgOQogICAgLy8gKEl0ZW0gYmVyYXQgNSwgNywgOCBkZW5nYW4gdG90YWwgbmlsYWkgMTAgKyA3ICsgMTIgPSAyIDkpCiAgICBjb3V0IDw8IG1heF92YWx1ZSA8PCBlbmRsOyAvLyBPdXRwdXQ6IDIgOQoKICAgIC8vIEppa2EgQW5kYSBiZW5hci1iZW5hciBtZW1lcmx1a2FuIGZvcm1hdCAiMiA5IiBzZXBlcnRpIHlhbmcgQW5kYSBzZWJ1dGthbiwgCiAgICAvLyBtZXNraXB1biB0aWRhayBzZXN1YWkgZGVuZ2FuIGhhc2lsIEtuYXBzYWNrIHlhbmcgYmVuYXIgKDIgOSksIAogICAgLy8gQW5kYSBiaXNhIG1lbmdnYW50aSBiYXJpcyBkaSBhdGFzIGRlbmdhbjoKICAgIC8vIGNvdXQgPDwgIjIgIDkiIDw8IGVuZGw7IAoKICAgIHJldHVybiAwOwp9