13:有一艘大船準備用來裝載貨物。所有待裝貨物都裝在貨箱中且所有貨箱的大小都一樣,
但貨箱的重量都各不相同。設第i 個貨箱的重量為wi(1≤i≤n),
而貨船的最大載重量為c,如何在貨船上裝入最多的貨物。
<?php/* *13:有一艘大船準備用來裝載貨物。所有待裝貨物都裝在貨箱中且所有貨箱的大小都一樣,
但貨箱的重量都各不相同。設第i 個貨箱的重量為wi(1≤i≤n),
而貨船的最大載重量為c,如何在貨船上裝入最多的貨物。
*系統環境:windows/linux
*編譯環境:php4/php5
*輸入引數:存放在in.txt,多個引數時空格分隔
引數1是一組數字,表示一組物品的重量 中間用分號分割;
重量,單位為千克,不能有0
引數3是乙個數字,表示最大重量,單位為千克,
例如格式:8,2,11,3,7 13
輸出:out.txt
*/$params=getparams(2);
$argv0=trim(trim($params[0]),",");
$argv1=trim($params[1]);
//檢查引數1
if(!preg_match_all("/^(\d+,?)+$/i", $argv0,$matches))
//檢查引數2
if(!is_numeric($argv1))
$weights=split(",",trim($argv0, ","));
$max_weight=$argv1;
foreach($weights
as$weight)
$ar = array ($weights,array_keys($weights));
//按照重量從小到大排序
array_multisort($ar[0],sort_numeric, sort_asc,$ar[1]);
$weights_order=$ar[0];
$index_order=$ar[1];
$now_weight=0;
$i=0;
$total=count($weights_order);
$find=array();
while(1)
else
if($now_weight==$max_weight)
}else
} }
//清空out.txt
output("",true);
if(count($find)==0)
//輸出結果
output("weight:$now_weight;");
foreach($find
as$index => $num)
error_msg("execute success");
/* 從in.txt裡讀取引數
*/function getparams($paramnum)
$in=preg_replace("/(\s+)/i", " ", $in);
//多個引數時,按照空格分隔
$parms=split(" ",trim($in));
if($parms===false)
if(count($parms) < $paramnum)
return
$parms;
} /*
把結果輸出到輸出檔案裡
當isclean=true時清空out.txt
*/function output($msg,$isclean=false)
error_log($msg."\n", 3, "out.txt");
} /*
輸入錯誤資訊
如果$is_exit表示輸入資訊後退出
*/function error_msg($msg,$is_exit=true)
?>
貪婪演算法 裝箱問題
貪婪演算法求出的最終解不一定是最優解 儲存形式 鍊錶 型別宣告 1.排序物品體積時物品的型別 typedef struct elemg 2.裝箱時物品的型別typedef struct nodegoodslink 3.箱子節點typedef struct boxebox elemg init goo...
貪婪演算法 集合覆蓋問題
我們生活往往會遇到很多類似於 書包裡東西要怎樣放才能裝下盡可能多的東西。具體來說 比如我有乙個可以裝35磅的袋子,有一台重15磅價值1500美元的結他 一台重20磅價值1000美元的電腦 台重30磅價值3000美元的音響。應該怎麼怎麼裝裝下價值最大的東西?貪婪策略的思想是 1 先裝價值最大的物品 2...
貪婪和非貪婪
python裡數量詞預設是貪婪的 在少數語言裡也可能是預設非貪婪 總是嘗試匹配盡可能多的字元 非貪婪則相反,總是嘗試匹配盡可能少的字元。在 後面加上?使貪婪變成非貪婪。s this is a number 234 235 22 423 r re.match d d d d s r.group 1 4...