揹包問題(動態規劃基礎)

2021-09-10 13:04:53 字數 838 閱讀 4556

dp[i][j]表示的是要存放第i個物品時,揹包此時的容量為j,揹包內物品的總價值

weight表示物品佔據揹包的體積

dp[i][j]=(dp[i-1][j],dp[i-1][j-weight[i]]+value[i]);//狀態轉移方程
我們之前看的關於dp的問題,對於每乙個元素的處理方法就是選和不選

我們的狀態轉移方程也是根據這個得出的

01揹包問題動態規劃模板:

void dp()else

}} }

}

總結:利用動態規劃解決揹包問題的效率即是填寫此張表的效率,

所以動態規劃的時間效率為o(number*capacity)=o(n*c),

由於用到二維陣列儲存子問題的解,所以動態規劃的空間效率為o(n*c);

void findwhat(int i,int j)//尋找解的組成方式

else if( j-w[i]>=0 && v[i][j]==v[i-1][j-w[i]]+v[i] )

}}

完全揹包是在01揹包的基礎上進行高階的,01揹包之所以在揹包前加個01是因為物品每種只有乙個,兩種狀態,放與不放,放就是1,不放就是0

完全揹包比01揹包多的條件是物品不止乙個,會有多個物品,我們可以選擇多個相同的物品放入揹包

void packagetotal()

else}}

} }}

揹包問題相關優秀博文:

教你徹底學會動態規劃——入門篇

動態規劃三部曲之乙個故事教你透徹理解動態規劃(一)

動態規劃 揹包問題基礎

1.0 1揹包 var v,p array 0.1000 of longint f array 0.100000 of longint n,m,i,j longint function max a,b longint longint begin if a b then exit a exit b e...

動態規劃基礎 0 1揹包問題

這種揹包問題是最基礎的一類揹包問題。只要掌握的這種,後面的也就是大同小異了。因此,我在這個問題上將講得非常詳細。0 1揹包問題就是存在乙個揹包有著固定的容積m,物品有自己的質量w和價值c,當然,每乙個物品都只有一件,而且不可拆分。你的任務是 把這些東西裝入這個揹包,使裝入物品的價值最大。首先,貪心演...

動態規劃 揹包問題

給定n個物品,重量是,價值是,包的容量 承重 是w 問,放入哪些物品能使得包內價值最大 1 需要將問題轉化為子問題,通過遞迴實現,且子問題必然與父問題存在關聯 2 定義v i,j 表示為,當item取自前i個items且揹包capacity j 時,揹包問題的最優解,也即最高的價值。3 從前i個it...