有一堆货物,有各种大小和价值不等的多个物品,而你只有固定大小的背包,拿走哪些能保证你的背包带走的价值最多
动态规划就是可以记录前一次递归过程中计算出的最大值,在之后的递归期间使用,以免重复计算。
<?PHP $thing_arr = array( array('size' => 9, 'weight' =>10), array('size' => 4, 'weight' => 5), array('size' => 6, 'weight' => 4), array('size' => 7, 'weight' => 9), ); $max_package_arr = array(); $max_thing_arr = array(); function package($space) { global $thing_arr, $max_package_arr, $max_thing_arr; if (isset($max_package_arr[$space])) return $max_package_arr[$space]; $max_value = 0; foreach($thing_arr as $thing) { if (($rest_space = $space-$thing['size'])>0) { if (($value = package($rest_space) + $thing['weight']) > $max_value ) { $max_package_arr[$space] = $max_value = $value; $max_thing_arr[$space] = $thing['weight']; } } } return $max_value; } echo package(12); print_r($max_thing_arr);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。