現有一些小的木箱需要裝到大的集裝箱里面,
裝箱規則:
1) 集裝箱總長度:不能超過 11.86 m;也不能小于 11.5 m
2) 集裝箱總重量:不能超過 19900 Kg
3) 長度為4.73 木箱, 一個集裝箱里面只能有一件
4) 只允許存在一個不滿足條件的空箱 ( 小于 11.5 m ) ,
即: 1號集裝箱裝完之后,貨物長度 11.6 , 2號 11.4 m , 3號 11.2 m (不行 )
1號集裝箱裝完之后,貨物長度 11.6 , 2號 11.7 m , 3號 11.2 m (允許 )
目前寫了一個遍歷的方法, 可以滿足前3條規則, 第4條規則滿足不了,
各位兄臺幫幫忙 !!!
附測驗資料 , 供參考(拷貝到EXCEL查看)
批次號碼 包裝號碼(木箱編號) 木箱重量 木箱長度
PC-2018-098 130 3720 4.73
PC-2018-098 125 3720 4.73
PC-2018-098 122 3660 4.73
PC-2018-098 121 3660 4.73
PC-2018-098 129 3720 4.73
PC-2018-098 128 3720 4.73
PC-2018-098 123 3720 4.73
PC-2018-098 126 3720 4.73
PC-2018-098 124 3720 4.73
PC-2018-098 127 3720 4.73
PC-2018-098 86 2340 4.15
PC-2018-098 93 2340 4.15
PC-2018-098 99 2340 4.15
PC-2018-098 82 2340 4.15
PC-2018-098 84 2340 4.15
PC-2018-098 98 2340 4.15
PC-2018-098 94 2340 4.15
PC-2018-098 95 2340 4.15
PC-2018-098 96 2340 4.15
PC-2018-098 97 2340 4.15
PC-2018-098 83 2340 4.15
PC-2018-098 91 2340 4.15
PC-2018-098 92 2340 4.15
PC-2018-098 85 2340 4.15
PC-2018-098 5 5360 3.9
PC-2018-098 2 5360 3.9
PC-2018-098 1 5360 3.9
PC-2018-098 4 5360 3.9
PC-2018-098 3 5360 3.9
PC-2018-098 74 1880 3.62
PC-2018-098 73 1880 3.62
PC-2018-098 77 1880 3.62
PC-2018-098 76 1880 3.62
PC-2018-098 75 1880 3.62
PC-2018-098 72 1880 3.62
PC-2018-098 66 1680 3.58
PC-2018-098 68 1680 3.58
PC-2018-098 65 1680 3.58
PC-2018-098 62 1680 3.58
PC-2018-098 63 1680 3.58
PC-2018-098 64 1680 3.58
PC-2018-098 67 1680 3.58
PC-2018-098 24 3611 3.5
PC-2018-098 23 3611 3.5
PC-2018-098 25 3611 3.5
PC-2018-098 26 3611 3.5
PC-2018-098 18 3780 3.42
PC-2018-098 19 3780 3.42
PC-2018-098 20 3780 3.42
PC-2018-098 21 3780 3.42
PC-2018-098 22 3780 3.42
PC-2018-098 34 2840 3.32
PC-2018-098 30 2840 3.32
PC-2018-098 31 2840 3.32
PC-2018-098 32 2840 3.32
PC-2018-098 33 2840 3.32
PC-2018-098 35 2840 3.32
PC-2018-098 16 5040 3.2
PC-2018-098 17 3200 3.2
PC-2018-098 11 5120 3.01
PC-2018-098 8 5120 3.01
PC-2018-098 9 5120 3.01
PC-2018-098 10 5120 3.01
PC-2018-098 13 5120 3.01
PC-2018-098 14 5120 3.01
PC-2018-098 15 5120 3.01
PC-2018-098 6 5120 3.01
PC-2018-098 12 5120 3.01
PC-2018-098 7 5120 3.01
PC-2018-098 29 3606 2.98
PC-2018-098 28 3606 2.98
PC-2018-098 27 3606 2.98
PC-2018-098 112 3380 1.7
PC-2018-098 113 3380 1.7
PC-2018-098 114 3380 1.7
PC-2018-098 115 3380 1.7
PC-2018-098 116 3380 1.7
PC-2018-098 118 3380 1.7
PC-2018-098 119 3380 1.7
PC-2018-098 109 3380 1.7
PC-2018-098 117 3380 1.7
PC-2018-098 120 3380 1.7
PC-2018-098 110 3380 1.7
PC-2018-098 111 3380 1.7
PC-2018-098 56 1360 1.67
PC-2018-098 81 1820 1.67
PC-2018-098 59 1360 1.67
PC-2018-098 104 2596 1.67
PC-2018-098 69 1582 1.67
PC-2018-098 108 2596 1.67
PC-2018-098 71 1582 1.67
PC-2018-098 70 1582 1.67
PC-2018-098 79 1820 1.67
PC-2018-098 78 1820 1.67
PC-2018-098 57 1360 1.67
PC-2018-098 58 1360 1.67
PC-2018-098 103 2596 1.67
PC-2018-098 88 2520 1.67
PC-2018-098 90 2520 1.67
PC-2018-098 80 1820 1.67
PC-2018-098 107 2596 1.67
PC-2018-098 101 2596 1.67
PC-2018-098 105 2596 1.67
PC-2018-098 106 2596 1.67
PC-2018-098 89 2520 1.67
PC-2018-098 102 2596 1.67
PC-2018-098 61 1360 1.67
PC-2018-098 87 2520 1.67
PC-2018-098 100 2596 1.67
PC-2018-098 60 1360 1.67
PC-2018-098 50 2926 1.25
PC-2018-098 47 2926 1.25
PC-2018-098 48 2926 1.25
PC-2018-098 49 2926 1.25
PC-2018-098 53 741.4 1.16
PC-2018-098 52 1340 1.16
PC-2018-098 51 1714 1.16
PC-2018-098 46 2690 1
PC-2018-098 45 2690 1
PC-2018-098 54 256 0.96
PC-2018-098 41 3640 0.96
PC-2018-098 39 3640 0.96
PC-2018-098 37 3640 0.96
PC-2018-098 43 3640 0.96
PC-2018-098 44 3640 0.96
PC-2018-098 55 176 0.96
PC-2018-098 42 3640 0.96
PC-2018-098 38 3640 0.96
PC-2018-098 40 3640 0.96
PC-2018-098 36 3640 0.96
uj5u.com熱心網友回復:
程式無法象人這樣思考,你應該先按照常用箱的規格定下來幾個模板,先根據模板來組合生成箱,比如有4.73的按照有4.73的標準模板(4.73中再分有無4.15的,模板個數自己先定),然后不能按照模板來的再根據以上規則先自由組合,最后再根據條件成立情況不同箱之間交換箱來達到。uj5u.com熱心網友回復:
另外思路就是現在有N個二維數K(a,b) a=長度,b=重量 ,然后需要創建M個二維陣列 J(K)(M)=(K1,K2,K3.....),將N個二維數不停的交換位置(其中有L個4.73位置不能變動)排列組合,使得至少 M - 1 個陣列11.86>sum(a)>11.5 and M個素組 SUM(B)<199990 and M個陣列sum(a)<11.86uj5u.com熱心網友回復:
恩, 現在就是這個想法, 但是難點就在這個“排列組合”

拍了老半天了, 前3個規則滿足, 最后一個不行
uj5u.com熱心網友回復:
補充一下,當有N個箱存在時,你先不管現在有多少個箱,先匯總出有多個種類的箱,先只管123條件不管數量,然后寫演算法組合出所有可能的組合,然后再根據各種擁有的數量去掉不合理的組合,再根據組合來回圈配對(數量這時候判斷),得出最終的第一個合適的集。比如:這么多箱中現在有 A B C E F 五種箱,任意組合(A最多一個,其他無限制數量)實作 滿足 1,2條件的集合,然后再由數量來判斷使用哪些組合,剩余的就是尾箱。比如A最多一個,那么有10個A那么至少有10個箱,然后再根據其他箱的數量計算每種含A的箱最大箱數(0~10),同理不含A的箱也由數量來定最大箱數,再用假設法一個一個的排除可能性,比如 A1箱最大6箱,那么6箱時,其他箱的最大箱數情況就變化,這時A2箱最大 3,那么再有一個A箱,如果另外的A箱都是0,那么這個型別的就都不成立。那么就可以排除所有A1=6,A2=3的集,再回圈計算A1=6,A2=2,A3=2,但是B箱(無A)無滿足的,那么 622這個集也可以排除了,再來 試6211和其他不為0的箱組合,直到存在合適結果集為止。
uj5u.com熱心網友回復:
按無限數量寫組合種類是可以按照1,3把所有組合列出,再通過2條件排除不合理組合。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/14786.html
標籤:腳本語言
下一篇:powerbuilder 寫出來的程式 出現陣列越界問題,剛重啟電腦時打開沒問題,有時候電腦上打開的程式多了,打開
