- 论坛徽章:
- 0
|
本帖最后由 feuerchop 于 2010-08-18 20:12 编辑
我给个解法:
6种木块(12,-12,+7,-7,+5,-5),数量任意,假设背包大小W=N
为了用最小的块数填充,于是从权指最大的12开始,
-(if N>=12)N%12:得到商X和余数Y (X对应12的块数)
--观察余数Y:范围是从0-11
---if Y>=7: Y%7=X1余Y1
----显然Y1的范围是0-4
---if 7>Y>=5: Y%5 = X2于Y2
----显然Y2的范围是0-1
---if Y<5: Y的取之范围0-4
- (if 12>N>=7)N%7
--余下操作同12
-(if 7>N>=5) N%5
--余下操作同12
-否则便是1,2,3,4,参考下面的解法
到此为止,我们剩下4个数需要处理:1,2,3,4 (0忽略)
也就是说用最小的块数组合出1,2,3,4把上面得到的余数(Y1,Y2或Y)填满。对应的解法是:
1: (3*5)+(-7*2) (5块)
2:(7-5) (2块)
3:(3*5)-(12) (4块)
4: (7*2)-(5*2) (4块)
加上之前的商便是最后需要的块数。
此解法仅供参考于讨论。 |
|