ינו.21

בעיית תרמיל הגב

בעיית תרמיל הגב

נתונה קבוצת עצמים שלכל אחד מהם משקל ומחיר ותיק מוגבל במשקל, שאפשר להכניס לתוכו. המטרה היא להכניס לתיק מהעצמים הנתונים שסכום משקליהם אינו עולה על החסם הנתון, ומחירו מרבי. כל חפץ אפשר להשתמש רק פעם אחד.

  1. // Data:
  2. 1 // Values (Price) of items (array v)
  3. 2 // Weights of items (array w)
  4. 3 // Number of items (n)
  5. 4 // Knapsack capacity (W)
  6. public static int knapSack(int W, int[] w, int [] v, int n) {
  7. int [,] K = new int[n + 1, W + 1];
  8. //Run over all items
  9. for(int i = 0;i <= n; ++i) {
  10. //And run over all capacity
  11. for(int weight = 0; weight <= W; ++weight) {
  12. //if current item or current weight of this item 0 - set zero to array
  13. if(i == 0||weight == 0)
  14. K[i,weight] = 0;
  15. //if current "weight to fill" more or equal to current item weight
  16. else if(w[i-1] <= weight)
  17. {
  18. //choose max between
  19. // new addition of value and weight
  20. // previous stored value and weight
  21. K[i,weight] = Math.Max(
  22. v[i-1] + K[i-1,weight-w[i-1]],
  23. K[i-1],weight]
  24. );
  25. }
  26. else
  27. //set as previous
  28. K[i,weight] = K[i-1,weight];
  29. }
  30. }
  31. return K[n, W]; //return current value of knapSack
  32. }


שתף את הסיפור הזה:

תגובות(0)

השאירו תגובה

קפטצ'ה לא מתאימה

תגובה