通常打包要求有:1、码长限制;2、色光(A、B色);3、装箱限量(就是限制这一箱装多少米); 
其中码长通常为一范围, 色光为:A、B、C、D之类例:现假设有一批货,代号为:008
1、码长要求为 ≥30米;    
2、装箱限量≤200米
原始数据库中的数据(图1):                    
序号   数量(米)  色光
1 60 A
2 70 B
3 80 A
4 20 A
5 40 B
6 50 C
7 70 A
8 30 A
9 50 B
10 18 B 开始计算结果如下(图2)序号 b 数量(米) 色光 包号
1 60 A 1
3 80 A 1
7 70 A 2
8 30 A 2
2 70 B 3
5 40 B 3
9 50 B 3
6 50 C 4
4 20 A 5
10 18 B 5注:1、在上例中,先剔除码长不符合要求的,然后再成件。
2、色光相同的要成在一个件中。
a.刚开始先把码长不符合要求的(码长要求为 ≥30米),如4号和10号放最下面
b。在色光A中按顺序数量相加,如60+80<200,若60+80+70=210>200,不符合要求,则包号为1。再次在色光为A中剩下的按顺序数量相加,如70+30=100<200
则包号为2
同理B,C
c.码长不符合要求的不管多少通统定为最后的数字

解决方案 »

  1.   

    这种算法并不简单.
    比如:
    色光为A的有如下码长数据:
    120
    110
    90
    80
    如按楼主的算法,那么
    30<120<200
    30<120+110>200

    120 包号 1
    30<110+90=200

    110 包号 2
    90  包号 2
    乘下有
    80  包号 3很明显我们可以排得如下包号:
    120 1
     80 1
    110 2
     90 2
    这算法还简单么?
      

  2.   

    to 回复人: unsigned(僵哥)
    对你的例子,如果是按顺序来,那么有3个包号,如果是最优的话,那么是两个包号,你可以把两个算法都写一下吗,急用????