#include <iostream>
#include <vector>
using namespace std;
// Fungsi untuk menghitung solusi knapsack 0/1
int knapsack(int kapasitas, vector<int> berat, vector<int> nilai, int n) {
vector<vector<int>> dp(n + 1, vector<int>(kapasitas + 1, 0));
for (int i = 1; i <= n; i++) {
for (int w = 1; w <= kapasitas; w++) {
if (berat[i - 1] <= w)
dp[i][w] = max(nilai[i - 1] + dp[i - 1][w - berat[i - 1]], dp[i - 1][w]);
else
dp[i][w] = dp[i - 1][w];
}
}
return dp[n][kapasitas];
}
int main() {
int n = 5; // jumlah barang
vector<int> berat = {5, 4, 7, 8, 10};
vector<int> nilai = {10, 5, 7, 12, 8};
int kapasitas = 20;
cout << "Implementasi dan Pengujian Solusi Knapsack 0/1\n";
cout << "Jumlah barang: " << n << endl;
cout << "Kapasitas maksimum: " << kapasitas << endl;
int hasil = knapsack(kapasitas, berat, nilai, n);
cout << "Nilai maksimum yang dapat diperoleh: " << hasil << endl;
// Uji hasil sesuai contoh
if (hasil == 29)
cout << "✅ Hasil benar (29)" << endl;
else
cout << "❌ Hasil salah, seharusnya 29" << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgc29sdXNpIGtuYXBzYWNrIDAvMQppbnQga25hcHNhY2soaW50IGthcGFzaXRhcywgdmVjdG9yPGludD4gYmVyYXQsIHZlY3RvcjxpbnQ+IG5pbGFpLCBpbnQgbikgewogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkcChuICsgMSwgdmVjdG9yPGludD4oa2FwYXNpdGFzICsgMSwgMCkpOwoKICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgewogICAgICAgIGZvciAoaW50IHcgPSAxOyB3IDw9IGthcGFzaXRhczsgdysrKSB7CiAgICAgICAgICAgIGlmIChiZXJhdFtpIC0gMV0gPD0gdykKICAgICAgICAgICAgICAgIGRwW2ldW3ddID0gbWF4KG5pbGFpW2kgLSAxXSArIGRwW2kgLSAxXVt3IC0gYmVyYXRbaSAtIDFdXSwgZHBbaSAtIDFdW3ddKTsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZHBbaV1bd10gPSBkcFtpIC0gMV1bd107CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGRwW25dW2thcGFzaXRhc107Cn0KCmludCBtYWluKCkgewogICAgaW50IG4gPSA1OyAvLyBqdW1sYWggYmFyYW5nCiAgICB2ZWN0b3I8aW50PiBiZXJhdCA9IHs1LCA0LCA3LCA4LCAxMH07CiAgICB2ZWN0b3I8aW50PiBuaWxhaSA9IHsxMCwgNSwgNywgMTIsIDh9OwogICAgaW50IGthcGFzaXRhcyA9IDIwOwoKICAgIGNvdXQgPDwgIkltcGxlbWVudGFzaSBkYW4gUGVuZ3VqaWFuIFNvbHVzaSBLbmFwc2FjayAwLzFcbiI7CiAgICBjb3V0IDw8ICJKdW1sYWggYmFyYW5nOiAiIDw8IG4gPDwgZW5kbDsKICAgIGNvdXQgPDwgIkthcGFzaXRhcyBtYWtzaW11bTogIiA8PCBrYXBhc2l0YXMgPDwgZW5kbDsKCiAgICBpbnQgaGFzaWwgPSBrbmFwc2FjayhrYXBhc2l0YXMsIGJlcmF0LCBuaWxhaSwgbik7CgogICAgY291dCA8PCAiTmlsYWkgbWFrc2ltdW0geWFuZyBkYXBhdCBkaXBlcm9sZWg6ICIgPDwgaGFzaWwgPDwgZW5kbDsKCiAgICAvLyBVamkgaGFzaWwgc2VzdWFpIGNvbnRvaAogICAgaWYgKGhhc2lsID09IDI5KQogICAgICAgIGNvdXQgPDwgIuKchSBIYXNpbCBiZW5hciAoMjkpIiA8PCBlbmRsOwogICAgZWxzZQogICAgICAgIGNvdXQgPDwgIuKdjCBIYXNpbCBzYWxhaCwgc2VoYXJ1c255YSAyOSIgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=