fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. // Fungsi untuk menghitung nilai maksimum dengan algoritma 0/1 Knapsack
  6. int knapsack(int W, vector<int> w, vector<int> v, int n) {
  7. vector<vector<int>> dp(n + 1, vector<int>(W + 1, 0));
  8.  
  9. for (int i = 1; i <= n; i++) {
  10. for (int j = 1; j <= W; j++) {
  11. if (w[i - 1] <= j)
  12. dp[i][j] = max(v[i - 1] + dp[i - 1][j - w[i - 1]], dp[i - 1][j]);
  13. else
  14. dp[i][j] = dp[i - 1][j];
  15. }
  16. }
  17.  
  18. return dp[n][W];
  19. }
  20.  
  21. int main() {
  22. int n, W;
  23.  
  24. cout << "Masukkan jumlah barang: ";
  25. cin >> n;
  26.  
  27. vector<int> w(n), v(n);
  28.  
  29. cout << "Masukkan bobot masing-masing barang: ";
  30. for (int i = 0; i < n; i++) cin >> w[i];
  31.  
  32. cout << "Masukkan nilai masing-masing barang: ";
  33. for (int i = 0; i < n; i++) cin >> v[i];
  34.  
  35. cout << "Masukkan kapasitas maksimal yang dapat ditampung: ";
  36. cin >> W;
  37.  
  38. int hasil = knapsack(W, w, v, n);
  39.  
  40. cout << "\nNilai maksimum yang dapat dibawa: " << hasil << endl;
  41.  
  42. return 0;
  43. }
  44.  
Success #stdin #stdout 0.01s 5320KB
stdin
6
3 8 5 4 10 8
6 4 5 6 5 10
stdout
Masukkan jumlah barang: Masukkan bobot masing-masing barang: Masukkan nilai masing-masing barang: Masukkan kapasitas maksimal yang dapat ditampung: 
Nilai maksimum yang dapat dibawa: 36