PHP动态规划求解0-1背包问题的实例分析
背包问题描述:背包的最大重量为W,现在有n项,每项重量t,每一个项目值得v。
背包的重量是最大的(但不超过W),而背包的价值是最大的。
想法:定义一个二维数组,一个维度代表项目的数量(代表每个项目),二维是权重(不超过最大值,这里是15),下面的数组A,
动态规划的思想,最大最大(OPT(i-1,W),无线+选择(i-1,w-wi))
一个最优解的选择(i-1,w-wi)
< PHP
这是我根据动态编程原理编写的。
/ /最大(OPT(i-1,W),无线+选择(i-1,w-wi))
你可以放最大的重量/背包。
$ = 15;
这是四个项目,每个项目的重量
$ DX =阵列(3,4,5,6);
每个项目的价值。
$ QZ =阵列(8,7,4,9);
定义数组
$ =数组();
初始化
对于($ i = 0;$ i = 15;$ + +){ $ 0 { } $ I } = 0;}
对于($ = 0;$ j = 4;$ + +){ $ { } 0 } = 0 };}
/ /选择(i-1,W),无线+选择(i-1,w-wi)
对于($ = 1;$ j = 4;$ + +){
($ i = 1;$ i = 15;$ + +){
$ { $ J } { } = {我美元美元美元美元} { } J-1;
不大于w=15的最大值。
如果($ DX { $ J-1 } < = $ W){
如果(!isset($ { $ J-1 } { $我至DX { $ J-1 } }))继续;
/ /无线+选择(i-1,WI)
TMP =美元美元美元美元} { { J-1我DX { } } J-1美元美元美元美元+ QZ { J-1 };
/ /选择(i-1,W),无线+选择(i-1,w-wi)= >比较
如果($ $)
$ $;
}
}
}
}
打印此数组时,输出值与最大值成直角。
对于($ = 0;$ j = 4;$ + +){
为($我= 0;美元15美元我<=;i++){
返回$ $ { }。;
回声;
}
>
希望本文能对大家的PHP程序设计有所帮助。