說完了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場比賽.每組資料由三行組成.第一行包含兩...