分类:
2007-05-23 16:24:56
$a=array(2798617,2885031,17853577,6826953,24701392,3299597,5763205,2720910,7311416);//假设有这些文件大小 $need=50000000;//假设光盘最大容量 natsort($a);$bs=array_keys($a);//取得自然序列成数组 sort($a);//文件大小排序 $min=min($a); $sum=array_sum($a); if($need>$sum || $need<$min) die();//如果全部的和小于光盘容量或者最小文件容量大于光盘容量就没必要继续了 $pre=-1; $key=''; $all=count($a); for($i=0;$i<$all-1;$i++) { $m=$a[$i]; $k=$i; if($m>$need) break; $cha=$need-$m; if($pre>-1) { if($pre>$cha) { $pre=$cha; $key=$k; } } else $pre=$cha; for($j=$i+1;$j<$all;$j++) { $m+=$a[$j]; $k.='+'.$j; if($m>$need) break; $cha=$need-$m; if($pre>$cha) { $pre=$cha; $key=$k; } for($x=$j+1;$x<$all;$x++) { $m+=$a[$x]; if($m>$need) break; $cha=$need-$m; $k.='+'.$x; if($pre>$cha) { $pre=$cha; $key=$k; } } } } $tmp=explode('+',$key); foreach($tmp as $v) { $bt[]=$bs[$v]+1; } sort($bt);//取得原始序列 echo '最佳组和:',join('+',$bt),' 浪费空间:',$pre; ?> |
运行结果:
最佳组和:3+5+9 浪费空间:133615
就是说第3,5,9号文件组合起来刻录到光盘浪费的空白空间最少