額,鑑於寫的文章太少,本來這一篇可以加在一起原來的揹包彙總中,
但是,那樣太長啦,就分開寫一下(順便加一點原創量,我太卑微啦)。
想看一下其他的揹包板子戳一戳-》-》揹包彙總
ok,進入正題:
所謂混合揹包就是,題目中的物品既有限定數目的物品,也有可以無限次使用的物品,揹包的體積還是定值,這就需要我們,分開討論一下。
首先:我們知道01揹包與多重揹包的區別就是,多重揹包需要套用一下二進位制優化,但是核心還是01揹包,所以我們可以把01揹包與多重揹包歸結在乙個子問題中。而完全揹包放在另乙個子問題中。
其次:下面就是安排一下判斷語句即可,因為較為簡單,看**即可
#includeusing namespace std;
const int maxn=1e4+7;
int w[maxn],v[maxn],tot[maxn];
int dp[200010];
int main()
for(int k=1; k=w[i]*k; j--)
dp[j]=max(dp[j],dp[j-w[i]*k]+v[i]*k);
x-=k;
}if(x)
for(int j=v; j>=w[i]*x; j--)///相當於還剩乙個物品未考慮
dp[j]=max(dp[j],dp[j-w[i]*x]+v[i]*x);}}
cout《感覺這樣學習,還是有點用的,推薦大家能夠按照板塊的學習,這樣不會太亂,也會更精一點。
每個人都應該有自信說自己是全世界最亮的仔!!!
(但也不能驕傲)
模板練習 混合揹包
這次練習的是揹包模板 根據三種情況分別處理 把多重揹包轉換成01揹包處理 一開始寫的時候 思路偏了 把多重揹包 分成了1 w i 2 w i p i w i 這樣的情況 然後再當01揹包來寫的 結果不用多說了 改回來的時候又忘了改變量名 感覺自己宛如乙個智障 include include incl...
混合揹包問題 模板
第二天叫醒我的不是鬧鐘,是夢想!有 n 種物品和乙個容量是 v 的揹包。物品一共有三類 第一類物品只能用1次 01揹包 第二類物品可以用無限次 完全揹包 第三類物品最多只能用 si 次 多重揹包 每種體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使物品體積總和不超過揹包容量,且價值總和最大。...
揹包模板(01 多重 混合)
01揹包 需要注意的是 j 的迴圈為從大到小 include using namespace std const int n 10010 int f n int v n w n v n 表示價值,w n 表示體積或者重量 intmain for int i 0 icout 多重揹包 一般轉換成01揹...