揹包問題(一維dp)

2021-06-23 02:17:30 字數 671 閱讀 6485

揹包問題可謂是經典的動態規劃問題,這裡就給出01揹包,完全揹包,多重揹包的核心內容吧。可以作為模板用哦

見**:

<1>  01揹包(w[i]代表重量,v[i]代表價值,v代表揹包容量)

for(int i=0;i=w[i];j--)

dp[j]=max(dp[j-w[i]]+v[i],dp[j]);

<2> 完全揹包(完全揹包跟01揹包的**很像)

for(int i=0;i 多重揹包 

說起多重揹包,可以用單調佇列優化,也可以用二進位制優化,目前只學了二進位制優化方法,以後補上單調佇列演算法優化。

多重揹包其實就是01揹包與完全揹包的結合題。(f[i].w代表重量,f[i].v代表價值,f[i].t代表數量,w代表揹包容量)

在二進位制優化那邊我的**寫的有點繁瑣,可以更簡潔,就交給你們啦。

for(int i=0;i<=k;i++)

else //二進位制優化轉化成01揹包求解

m=(f[i].t-(cc-aa))*f[i].w;

g=(f[i].t-(cc-aa))*f[i].v;

for(int j=w;j>=m;j--)

dp[j]=max(dp[j],dp[j-m]+g);}}

DP 揹包問題(一)

以前不是很重視 dp 遇到 dp 就寫貪心 暴搜 其實這是非常錯誤的,現在開始練習 dp 了才發現,我好菜 對於dp的整理,先從眾所周知的揹包問題開始。01揹包 n 個物品,重量和價值分別為 w i v i 揹包容量 w,求所有挑選方案中價值總和的最大值。dp 方程 dp j max dp j dp...

一維dp陣列01揹包

有n件物品和乙個最多能被重量為w 的揹包。第i件物品的重量是weight i 得到的價值是value i 每件物品只能用一次,求解將哪些物品裝入揹包裡物品價值總和最大。這是標準的揹包問題,以至於很多同學看了這個自然就會想到揹包,甚至都不知道暴力的解法應該怎麼解了。這樣其實是沒有從底向上去思考,而是習...

DP 揹包問題

大牛 以下使用滾到陣列 若輸入要求一般,可以邊定義狀態邊輸入,不需儲存 memset f,0,sizeof int n 若求最小值,除 f 0 其餘初始化為 inf,f 0 0是必須的 求最大最小都一樣 確保有從無到有的起點 0 1揹包 一般形式 f i v max f i 1 v f i 1 v ...