多背包问题
已知:运送一批物品,质量和需求数量如下:
质量: 26, 30, 40, 56, 60, 76, 80, 86, 90, 100, 110, 116, 120, 176, 180, 200
数量: 2, 10, 8, 16, 80, 6, 32, 4, 36, 4, 10, 8, 18, 40, 16, 8
求解:最小需要承重为600的背包多少个?
解答:
- 贪心算法 + 整数规划
- 动态规划 + 整数规划
贪心算法 + 整数规划
- 整体思路:
一个背包一个背包的装入,每次将背包最大程度的装满(整数规划),直至所需物品全部装入。 - 贪心算法:
每次将背包最大程度的装满 - 整数规划:
数量, x 1 , x 2 , . . . , x 22 x_1,x_2,...,x_{22} x1,x2,...,x22
maximize: 26 ∗ x 1 + 29 ∗ x 2 + . . . + 201 ∗ x 22 26 * x_1 + 29 * x_2 + ... + 201 * x_{22} 26∗x1+29∗x2+...+201∗x22
S.T.:
26 ∗ x 1 + 29 ∗ x 2 + . . . + 201 ∗ x 22 ≤ 600 26 * x_1 + 29 * x_2 + ... + 201 * x_{22} \leq 600 26∗x1+29∗x2+...+201∗x22≤600
0 ≤ x 1 ≤ 2 , i n t e g e r 0 \leq x_1 \leq 2, integer 0≤x1≤2,integer