《PHP實(shí)戰(zhàn):PHP動(dòng)態(tài)規(guī)劃解決0-1背包問(wèn)題實(shí)例分析》要點(diǎn):
本文介紹了PHP實(shí)戰(zhàn):PHP動(dòng)態(tài)規(guī)劃解決0-1背包問(wèn)題實(shí)例分析,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
本文實(shí)例分析了PHP動(dòng)態(tài)規(guī)劃辦理0-1背包問(wèn)題.分享給大家供大家參考.具體分析如下:PHP教程
背包問(wèn)題描述:一個(gè)承受最大重量為W的背包,現(xiàn)在有n個(gè)物品,每個(gè)物品重量為t, 每個(gè)物品的價(jià)值為v.
要使得這個(gè)背包重量最大(但不能超過(guò)W),同時(shí)又需要背包的價(jià)值最大.PHP教程
思路:定義一個(gè)二維數(shù)組,一維為物品數(shù)量(表示每個(gè)物品),二維是重量(不超過(guò)最大,這里是15),下面數(shù)組a,
動(dòng)態(tài)規(guī)劃原理思想,max(opt(i-1,w),wi+opt(i-1,w-wi)) 當(dāng)中最大值,
opt(i-1,w-wi)指上一個(gè)最優(yōu)解PHP教程
<?php //這是我根據(jù)動(dòng)態(tài)規(guī)劃原理寫(xiě)的 // max(opt(i-1,w),wi+opt(i-1,w-wi)) //背包可以裝最大的重量 $w=15; //這里有四件物品,每件物品的重量 $dx=array(3,4,5,6); //每件物品的價(jià)值 $qz=array(8,7,4,9); //定義一個(gè)數(shù)組 $a=array(); //初始化 for($i=0;$i<=15;$i++){ $a[0][$i]=0; } for ($j=0;$j<=4;$j++){ $a[$j][0]=0; } //opt(i-1,w),wi+opt(i-1,w-wi) for ($j=1;$j<=4;$j++){ for($i=1;$i<=15;$i++){ $a[$j][$i]=$a[$j-1][$i]; //不大于最大的w=15 if($dx[$j-1]<=$w){ if(!isset($a[$j-1][$i-$dx[$j-1]])) continue; //wi+opt(i-1,wi) $tmp = $a[$j-1][$i-$dx[$j-1]]+$qz[$j-1]; //opt(i-1,w),wi+opt(i-1,w-wi) => 進(jìn)行比較 if($tmp>$a[$j][$i]){ $a[$j][$i]=$tmp; } } } } //打印這個(gè)數(shù)組,輸出最右角的值是可以最大價(jià)值的 for ($j=0;$j<=4;$j++){ for ($i=0;$i<=15;$i++){ echo $a[$j][$i]."/t"; } echo "/n"; } ?>
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所贊助.PHP教程
歡迎參與《PHP實(shí)戰(zhàn):PHP動(dòng)態(tài)規(guī)劃解決0-1背包問(wèn)題實(shí)例分析》討論,分享您的想法,維易PHP學(xué)院為您提供專業(yè)教程。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.snjht.com/jiaocheng/11406.html