解題報告 01揹包

2021-08-15 21:16:37 字數 1132 閱讀 5908

這應該是最基礎的揹包問題了,但正因為他的基礎,他的思想會被用在很多dp題中,所以這裡有必要對他剖析一下。

我們應該掌握的方法有兩種

1、二維陣列。

2、滾動陣列。

後面那個一看就要高階一些,但是確實對動歸沒有太大的幫助,所以大家一定要把第一種方法學好!第二種方法我不做解釋,只會黏貼**,大家認真腦補一下應該也是可以理解的。

這裡定義揹包叫做f[i][j],i代表前i個物品的總重為j,f[i][j]一起表示前i個物品的總共價值,所以我們就可以很明顯的寫出動態轉移方程式:

if(w[i]<=v) f[i][v]=max(f[i-1][v],f[i-1][v-w[i]]+c[i]);

else f[i][v]=f[i-1][v];//important

if(w[i]<=v) f[i+1][v+w[i]]=max(f[i][v]+c[i],f[i+1][v+w[i]]);

······

這當然是有原因的,是因為害怕一直往後扔會出現重複的情況!!!

下面上**:

#include

#include

#include

#include

using

namespace

std;

int m,n;

int w[35],c[35];

int f[35][205];

int main()

for(int i=1;i<=n;++i)

}printf("%d",f[n][m]);

return

0;}

p.s:中間加important的地方一定不要漏寫了!

直接貼**,大家腦補吧!

#include

#include

using

namespace

std;

int bag[305];

int m,n;

int main()

printf("%d",ans);

return

0;}

謝謝採納!

01揹包 解題

假設一共有n件物品,第 i 件物品的價值為 vi 重量為wi,乙個小偷有乙個最多只能裝下重量為w的揹包,在總量不超過w的情況下讓總值盡量高。求最大總價值。n,w 4,5 w 2,1,3,2 v 3,2,4,2 解一 def dfs w int,v int,i int,n int,w int int ...

0 1揹包問題(動態規劃) 解題報告

利用動態規劃,以自底向上的方式解各子問題。解題思路 此問題可轉化為 給定c 0,wi 0,vi 0,1 i n,要求找出一 個n元0 1向量 x1,x2,xn xi 1 i n,使得 wixi c,而且 vixi達到最大。因此,0 1揹包是乙個特 殊的整數規劃問題 max vixi s.t.wixi...

HDU 2546 飯卡(01揹包) 解題報告

昨天吧揹包九講中最基礎的01揹包看完,做了2602。結果晚上比賽相同題目卻做不出。苦想幾個小時。解題思路 要使剩餘錢最少,應該留下塊錢買最貴的東西 標記為t 注意金額m 5 的情況!接下來就是用剩下的m 5元買除t以外的菜。每種菜只能買一次。就構成揹包問題。include include inclu...