Skip to content

Commit e8f96d9

Browse files
committed
feat: dynamic programming 💬
1 parent 0b92574 commit e8f96d9

File tree

1 file changed

+33
-6
lines changed

1 file changed

+33
-6
lines changed

package/Other/DynamicProgramming.php

Lines changed: 33 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,43 @@
77
* @date 2017/8/28
88
* @license Mozilla
99
* -------------------------------------------------------------
10-
* 思路分析:
10+
* 思路分析:动态规划原理思想,max(opt(i-1,w),wi+opt(i-1,w-wi)) 当中最大值,opt(i-1,w-wi)指上一个最优解
1111
* -------------------------------------------------------------
12-
* 题目放在这里,9点来完成实例
13-
*
14-
* @param $n
12+
* 一个承受最大重量为W的背包,现在有n个物品,每个物品重量为t, 每个物品的价值为v。
13+
* 要使得这个背包重量最大(但不能超过W),同时又需要背包的价值最大
14+
*
1515
* @return int
1616
*/
17-
function DynamicProgramming( $str )
17+
function DynamicProgramming( $maxSize ,$goods, $cost)
1818
{
19+
$container = [];
20+
$goodsCount = count($goods);
1921

22+
//初始化
23+
for ($i = 0; $i <= $maxSize; $i++) {
24+
$container[0][$i] = 0;
25+
}
26+
for ($j = 0; $j <= $goodsCount; $j++) {
27+
$container[$j][0] = 0;
28+
}
29+
for ($j = 1; $j <= $goodsCount; $j++) {
30+
for ($i = 1; $i <= $maxSize; $i++) {
31+
$container[$j][$i] = $container[$j - 1][$i];
32+
//不大于最大的w=15
33+
if ($goods[$j - 1] <= $maxSize) {
34+
if (!isset($container[ $j - 1 ][ $i - $goods[ $j - 1 ] ])) {
35+
continue;
36+
}
37+
//wi+opt(i-1,wi)
38+
$tmp = $container[ $j - 1 ][ $i - $goods[ $j - 1 ] ] + $cost[ $j - 1 ];
39+
//opt(i-1,w),wi+opt(i-1,w-wi) => 进行比较
40+
if ($tmp > $container[$j][$i]) {
41+
$container[$j][$i] = $tmp;
42+
}
43+
}
44+
}
45+
}
46+
var_dump($container[$j-1][$i - 1]);
2047
}
2148

22-
49+
echo DynamicProgramming(15, [3, 4, 5, 6], [8, 7, 4, 9]);

0 commit comments

Comments
 (0)