亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求配貨組合的最優算法

求配貨組合的最優算法

C PHP
yaoke 2017-12-14 18:16:15
假設商品編碼如下: Array ( ????[0]?=>?A ????[1]?=>?B ????[2]?=>?C ????[3]?=>?D ????[4]?=>?E ????[5]?=>?F ????[6]?=>?G ????[7]?=>?H ????[8]?=>?I ????[9]?=>?J ????[10]?=>?K ????[11]?=>?L ????[12]?=>?M ????[13]?=>?N ????[14]?=>?O ) 商品庫存: Array ( ????[A]?=>?34 ????[B]?=>?37 ????[C]?=>?27 ????[D]?=>?25 ????[E]?=>?45 ????[F]?=>?24 ????[G]?=>?37 ????[H]?=>?40 ????[I]?=>?49 ????[J]?=>?34 ????[K]?=>?49 ????[L]?=>?23 ????[M]?=>?44 ????[N]?=>?31 ????[O]?=>?22 ) 100個用戶申請發貨,至少兩件商品才可以申請發貨,發貨清單如下 Array ( ????[0]?=>?HII ????[1]?=>?ACDI ????[2]?=>?AG ????[3]?=>?AD ????[4]?=>?DG ????[5]?=>?ADDFG ????[6]?=>?BGI ????[7]?=>?DDFGI ????[8]?=>?AACEJ ????[9]?=>?ABC ????[10]?=>?ABD ????[11]?=>?AABF ????[12]?=>?BFGJ ????[13]?=>?CEGHI ????[14]?=>?AEFFF ????[15]?=>?AFGH ????[16]?=>?EH ????[17]?=>?CE ????[18]?=>?AD ????[19]?=>?FHHIJ ????[20]?=>?BDDHJ ????[21]?=>?CEFJJ ????[22]?=>?AB ????[23]?=>?CH ????[24]?=>?ACEJ ????[25]?=>?ABC ????[26]?=>?HI ????[27]?=>?AAEFIJ ????[28]?=>?ADII ????[29]?=>?BFFJ ????[30]?=>?DDHHJ ????[31]?=>?EGJJ ????[32]?=>?DG ????[33]?=>?AAABFH ????[34]?=>?BJ ????[35]?=>?CG ????[36]?=>?CI ????[37]?=>?FG ????[38]?=>?FFGGJJ ????[39]?=>?CFFH ????[40]?=>?BDFF ????[41]?=>?CDFH ????[42]?=>?DEG ????[43]?=>?ACEG ????[44]?=>?CGI ????[45]?=>?AEEI ????[46]?=>?AACFGH ????[47]?=>?FGG ????[48]?=>?ACDFHJ ????[49]?=>?ABHH ????[50]?=>?CDIIJ ????[51]?=>?BCD ????[52]?=>?AEFHHI ????[53]?=>?EEEH ????[54]?=>?AACEFH ????[55]?=>?DDEGHJ ????[56]?=>?GHJJJ ????[57]?=>?BEFJJ ????[58]?=>?DEHIJJ ????[59]?=>?ABDJ ????[60]?=>?BE ????[61]?=>?BEEGGI ????[62]?=>?AFJ ????[63]?=>?FF ????[64]?=>?AE ????[65]?=>?ABEJ ????[66]?=>?AIJJ ????[67]?=>?AE ????[68]?=>?CHJ ????[69]?=>?ACHII ????[70]?=>?AAEFGJ ????[71]?=>?FG ????[72]?=>?AEH ????[73]?=>?EF ????[74]?=>?EG ????[75]?=>?EGHI ????[76]?=>?DFG ????[77]?=>?ABDHI ????[78]?=>?BDE ????[79]?=>?EEGIJJ ????[80]?=>?AAADGG ????[81]?=>?FFF ????[82]?=>?AI ????[83]?=>?ACEFJ ????[84]?=>?AACDEF ????[85]?=>?EEGIIJ ????[86]?=>?BF ????[87]?=>?AD ????[88]?=>?BEJJ ????[89]?=>?DDEEFF ????[90]?=>?BFGII ????[91]?=>?BDDE ????[92]?=>?BCCDIJ ????[93]?=>?AACCCH ????[94]?=>?AABFG ????[95]?=>?CDHIJ ????[96]?=>?BCDEGJ ????[97]?=>?DEHJ ????[98]?=>?EFG ????[99]?=>?BEEFI ) 求已知上述商品庫存的情況下,可以發出的最大包裹數是多少
查看完整描述

1 回答

?
灬紫羽

TA貢獻107條經驗 獲得超71個贊

<?php
#?以下純屬個人見解,算法或許不是最優,歡迎各位大佬點評
#?商品數組
$goods?=?array('A','B','C');
#?商品庫存數組
$store?=?array('A'?=>?4,?'B'?=>?3,?'C'?=>?2);
$tmp?=?[];?#?記錄商品添加的次數
$result?=?[];?#?表示各種組合
#?i?表示最少幾個商品組合
for?($i?=?2?;$i?<=?4?;?$i?++??){
????$combines????=?Combination($goods,$i);
????$result?=?array_merge($result,$combines);
}
#?反轉,鍵從小到大的商品為?最多組合的商品?到?最少商品的組合
$result?=?array_reverse($result);
#?驗證庫存
foreach?($result?as?$key?=>?$item){
????$flag?=?false;?#?表示是否刪除此項
????$com?=?explode('---',$item);
????foreach?($com?as?$v){
????????if(in_array($v,array_keys($tmp))){
????????????if($tmp[$v]?>=?$store[$v])?{
????????????????$flag?=?true;
????????????????continue;
????????????}?else?{
????????????????$tmp[$v]?+=?1;
????????????}
????????}?else?{
????????????$tmp[$v]?=?1;
????????}
????}
????if($flag)?unset($result[$key]);
}

/*從數組中拿出組合數*/
function?Combination($sort,?$num)
{
????$result?=?$data?=?array();
????if(?$num?==?1?)?{
????????return?$sort;
????}
????foreach(?$sort?as?$k=>$v?)?{
????????unset($sort[$k]);
????????$data???=?Combination($sort,$num-1);
????????foreach($data?as?$row)?{
????????????$result[]?=?$v.'---'.$row;
????????}
????}
????return?$result;
}

https://img1.sycdn.imooc.com//5cd292260001bbed08440202.jpg

https://img1.sycdn.imooc.com//5cd292260001726b08500176.jpg


查看完整回答
1 反對 回復 2019-05-08
  • 1 回答
  • 0 關注
  • 1533 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號