DP之揹包學習記錄(三)

2021-06-28 13:00:52 字數 1219 閱讀 8651

說完了01揹包,完全揹包,我們接著學習多重揹包,還是介紹下問題題目有

n種物品和乙個容量為

v的揹包。第

i種物品最多有

n[i]

件可用,每件費用是

c[i]

,價值是

w[i]

。求解將哪些物品裝入揹包可使這些物品的費用總和不超過揹包容量,且價值總和最大。

我們還是老樣子,先寫出多重揹包的類似於01揹包的狀態轉移方程

dp[i][v] = max(dp[i-1][v],dp[i-1][v - k*c[i]]+k

*w[i]);    0<=k<=c[i];

我們還是要根據二進位制的思想,每一種物品呢,我們分成若干件

int n;  //輸入有多少種物品

int c;  //每種物品有多少件

int v;  //每種物品的價值

int s;  //每種物品的尺寸

int count = 0; //分解後可得到多少種物品

int value[max]; //用來儲存分解後的物品價值

int size[max];  //用來儲存分解後物品體積

scanf("%d", &n);    //先輸入有多少種物品,接下來對每種物品進行分解

while (n--)     //接下來輸入n中這個物品

if (c > 0)

}這樣呢,我們再根據01揹包的公式,寫出狀態轉移

#include

#include

#include

#include

#include

#include

#include

#define ll __int64

#define max 1000009

using namespace std;

int c[max];//件數

int w[max];//尺寸

int v[max];//價值

int dp[max];

int count;//分解完的物品總數

int value[max];//分解完的每件物品的價值

int size[max];//分解完每件物品的體積

int main()

if(c[i]>0)

}memset(dp,0,sizeof(dp));//轉化成01揹包

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

}cout<

DP之揹包學習記錄 一

昨天看了01揹包,完全揹包,和多重揹包這三個問題,然後呢,01和完全的區別在於順序還是倒序.今天偷點懶,寫完解題報告就滾床睡,剛才看到了whud大牛的部落格,好棒,真的好棒,自己要加油啦,在2015年希望有個質的飛越。揹包問題是dp問題的乙個分支,所有揹包問題呢,都是可以劃分到01揹包這個最簡單基礎...

DP學習之完全揹包

有 n nn 種物品和乙個容量是 v 的揹包,每種物品都有無限件可用。第 i ii 種物品的體積是v iv i vi 價值是 w iw i wi 求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。資料範圍 0 v 1000 00v 10 000 wi 1000 00 wi 1...

揹包dp之01揹包

現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...