fork download
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int max(int a, int b) {
  6. return (a > b) ? a : b;
  7. }
  8.  
  9. int knapSack(int W, vector<int> wt, vector<int> val, int n) {
  10. vector<vector<int>> K(n + 1, vector<int>(W + 1));
  11.  
  12. for (int i = 0; i <= n; i++) {
  13. for (int w = 0; w <= W; w++) {
  14. if (i == 0 || w == 0)
  15. K[i][w] = 0;
  16. else if (wt[i - 1] <= w)
  17. K[i][w] = max(val[i - 1] + K[i - 1][w - wt[i - 1]], K[i - 1][w]);
  18. else
  19. K[i][w] = K[i - 1][w];
  20. }
  21. }
  22.  
  23. return K[n][W];
  24. }
  25.  
  26. int main() {
  27. int n = 5; // jumlah barang
  28. int W = 5; // kapasitas tas
  29.  
  30. vector<int> val = {4, 8, 10, 7, 8};
  31. vector<int> wt = {7, 10, 5, 12, 20};
  32.  
  33. cout << "Nilai maksimum yang dapat dibawa = " << knapSack(W, wt, val, n) << endl;
  34. return 0;
  35. }
  36.  
Success #stdin #stdout 0.01s 5320KB
stdin
20
stdout
Nilai maksimum yang dapat dibawa = 10