skimono

Week_4_Task_2

Mar 9th, 2026 (edited)
27
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.38 KB | None | 0 0
  1. int: n = 50;
  2.  
  3. array[1..n] of int: weight = [91, 24, 13, 45, 41, 38, 27, 23, 96, 79, 21, 85, 64, 14, 13, 21, 37, 39, 74, 87, 13, 81, 35, 93, 99, 79, 63, 38, 67, 85, 45, 10, 30, 99, 64, 53, 45, 29, 37, 53, 23, 21, 58, 22, 55, 54, 87, 43, 15, 68];
  4.  
  5. array[1..n] of int: value = [51, 116, 40, 95, 112, 69, 37, 31, 78, 94, 40, 79, 45, 117, 91, 136, 113, 61, 114, 110, 73, 88, 38, 63, 82, 61, 138, 117, 89, 76, 103, 34, 78, 28, 100, 122, 88, 36, 74, 100, 74, 147, 121, 137, 56, 87, 55, 83, 87, 129];
  6.  
  7. int: capacity = 832;
  8.  
  9. set of int: ITEMS = 1..n;
  10.  
  11. array[ITEMS] of var 0..1: used;
  12.  
  13. array [ITEMS] of float: denisty = [value[i] / weight[i] | i in ITEMS];
  14.  
  15. var int: total_value = sum(i in ITEMS)(value[i] * used[i]);
  16. var int: total_weight = sum(i in ITEMS)(weight[i] * used[i]);
  17.  
  18. set of int: feasible = { i | i in ITEMS where weight[i] <= capacity };
  19. int: max_feasible_value = max([ value[i] | i in feasible ]);
  20. constraint total_value >= max_feasible_value;
  21.  
  22. constraint sum(i in ITEMS)(used[i]) <= 30; %В лучшем ответе было < 30, поэтому я выбрал 30.
  23.  
  24. constraint sum(i in ITEMS)(weight[i] * used[i]) <= capacity;
  25.  
  26. array[ITEMS] of int: density_order = arg_sort([-denisty[i] | i in ITEMS]);
  27.  
  28. solve :: int_search([used[i] | i in density_order], first_fail, indomain_max) maximize total_value;
  29.  
  30. output [
  31. "=== Решение задачи о рюкзаке ===\n",
  32. "Выбранные предметы:\n"
  33. ] ++
  34. [
  35. if fix(used[i]) = 1 then
  36. " Предмет \(i): вес=\(weight[i]), ценность=\(value[i]), плотность ценности=\(denisty[i])\n"
  37. else "" endif
  38. | i in ITEMS
  39. ] ++
  40. [
  41. "Итого: вес=\(total_weight), ценность=\(total_value)\n"
  42. ];
  43.  
  44. /*
  45. === Решение задачи о рюкзаке ===
  46. Выбранные предметы:
  47. Предмет 2: вес=24, ценность=116, плотность ценности=4.833333333333333
  48. Предмет 3: вес=13, ценность=40, плотность ценности=3.076923076923077
  49. Предмет 4: вес=45, ценность=95, плотность ценности=2.111111111111111
  50. Предмет 5: вес=41, ценность=112, плотность ценности=2.731707317073171
  51. Предмет 6: вес=38, ценность=69, плотность ценности=1.815789473684211
  52. Предмет 14: вес=14, ценность=117, плотность ценности=8.357142857142858
  53. Предмет 15: вес=13, ценность=91, плотность ценности=7.0
  54. Предмет 16: вес=21, ценность=136, плотность ценности=6.476190476190476
  55. Предмет 17: вес=37, ценность=113, плотность ценности=3.054054054054054
  56. Предмет 21: вес=13, ценность=73, плотность ценности=5.615384615384615
  57. Предмет 27: вес=63, ценность=138, плотность ценности=2.190476190476191
  58. Предмет 28: вес=38, ценность=117, плотность ценности=3.078947368421053
  59. Предмет 31: вес=45, ценность=103, плотность ценности=2.288888888888889
  60. Предмет 32: вес=10, ценность=34, плотность ценности=3.4
  61. Предмет 33: вес=30, ценность=78, плотность ценности=2.6
  62. Предмет 36: вес=53, ценность=122, плотность ценности=2.30188679245283
  63. Предмет 37: вес=45, ценность=88, плотность ценности=1.955555555555555
  64. Предмет 39: вес=37, ценность=74, плотность ценности=2.0
  65. Предмет 41: вес=23, ценность=74, плотность ценности=3.217391304347826
  66. Предмет 42: вес=21, ценность=147, плотность ценности=7.0
  67. Предмет 43: вес=58, ценность=121, плотность ценности=2.086206896551724
  68. Предмет 44: вес=22, ценность=137, плотность ценности=6.227272727272728
  69. Предмет 48: вес=43, ценность=83, плотность ценности=1.930232558139535
  70. Предмет 49: вес=15, ценность=87, плотность ценности=5.8
  71. Предмет 50: вес=68, ценность=129, плотность ценности=1.897058823529412
  72. Итого: вес=830, ценность=2494
  73. */
Advertisement
Add Comment
Please, Sign In to add comment