#include <iostream>
#include <vector>
using namespace std;
// Fungsi untuk menghitung nilai maksimum dengan algoritma 0/1 Knapsack
int knapsack( int W, vector< int > w, vector< int > v, int n) {
vector< vector< int >> dp( n + 1 , vector< int > ( W + 1 , 0 ) ) ;
for ( int i = 1 ; i <= n; i++ ) {
for ( int j = 1 ; j <= W; j++ ) {
if ( w[ i - 1 ] <= j)
dp[ i] [ j] = max( v[ i - 1 ] + dp[ i - 1 ] [ j - w[ i - 1 ] ] , dp[ i - 1 ] [ j] ) ;
else
dp[ i] [ j] = dp[ i - 1 ] [ j] ;
}
}
return dp[ n] [ W] ;
}
int main( ) {
int n, W;
cout << "Masukkan jumlah barang: " ;
cin >> n;
vector< int > w( n) , v( n) ;
cout << "Masukkan bobot masing-masing barang: " ;
for ( int i = 0 ; i < n; i++ ) cin >> w[ i] ;
cout << "Masukkan nilai masing-masing barang: " ;
for ( int i = 0 ; i < n; i++ ) cin >> v[ i] ;
cout << "Masukkan kapasitas maksimal yang dapat ditampung: " ;
cin >> W;
int hasil = knapsack( W, w, v, n) ;
cout << "\n Nilai maksimum yang dapat dibawa: " << hasil << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgbmlsYWkgbWFrc2ltdW0gZGVuZ2FuIGFsZ29yaXRtYSAwLzEgS25hcHNhY2sKaW50IGtuYXBzYWNrKGludCBXLCB2ZWN0b3I8aW50PiB3LCB2ZWN0b3I8aW50PiB2LCBpbnQgbikgewogICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBkcChuICsgMSwgdmVjdG9yPGludD4oVyArIDEsIDApKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBXOyBqKyspIHsKICAgICAgICAgICAgaWYgKHdbaSAtIDFdIDw9IGopCiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IG1heCh2W2kgLSAxXSArIGRwW2kgLSAxXVtqIC0gd1tpIC0gMV1dLCBkcFtpIC0gMV1bal0pOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2kgLSAxXVtqXTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIGRwW25dW1ddOwp9CgppbnQgbWFpbigpIHsKICAgIGludCBuLCBXOwoKICAgIGNvdXQgPDwgIk1hc3Vra2FuIGp1bWxhaCBiYXJhbmc6ICI7CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8aW50PiB3KG4pLCB2KG4pOwoKICAgIGNvdXQgPDwgIk1hc3Vra2FuIGJvYm90IG1hc2luZy1tYXNpbmcgYmFyYW5nOiAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiB3W2ldOwoKICAgIGNvdXQgPDwgIk1hc3Vra2FuIG5pbGFpIG1hc2luZy1tYXNpbmcgYmFyYW5nOiAiOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIGNpbiA+PiB2W2ldOwoKICAgIGNvdXQgPDwgIk1hc3Vra2FuIGthcGFzaXRhcyBtYWtzaW1hbCB5YW5nIGRhcGF0IGRpdGFtcHVuZzogIjsKICAgIGNpbiA+PiBXOwoKICAgIGludCBoYXNpbCA9IGtuYXBzYWNrKFcsIHcsIHYsIG4pOwoKICAgIGNvdXQgPDwgIlxuTmlsYWkgbWFrc2ltdW0geWFuZyBkYXBhdCBkaWJhd2E6ICIgPDwgaGFzaWwgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=