揹包 小明逛超市(jzoj 2148)

2021-09-30 17:49:44 字數 809 閱讀 8538

有乙個大小為n的揹包,和m件物品,每件物品都有自己的**和價值還有個數,當個數為0時則為無限件,為1實則為1件,求最大的價值4 5

5 3 0

5 3 1

4 4 0

2 3 0

3 2 16買需求度為3的物品兩個,耗費22=4元,獲得32=6的需求度對於50%的資料,1≤m≤20

對於100%的資料,1≤m≤100,0≤n≤10000,1≤y≤1000這道題就是乙個混合揹包,但他只由完全揹包和01揹包組成,我就勤奮點把多重揹包也打上了比賽是眼瞎,沒看清題,以為有多重揹包,但還是ac了,我們不用直接加一重迴圈的方法,用二進位制優化,將5分為1,2,2,將8分為1,2,4,1

#include

#include

using

namespace std;

int n,m,x,y,z,w,t,a[

500000

],b[

500000

],f[

10000];

intmain()

if(z)

//餘下的

}for

(int i=

1;i<=w;i++

)for

(int j=n;j>=a[i]

;j--

) f[j]

=max

(f[j-a[i]

]+b[i]

,f[j]);

//01揹包

printf

("%d"

,f[n]);

return0;

}

超市買東西 01揹包

01揹包問題 你來到超市,發現超市有活動,給你乙個容量為w的揹包,你可以免費拿三件物品,要求這些物品可以放入揹包而不超重,並且價值最大。先輸入2個整數n,w,n表示物品的總數量,w見上 接下來輸入n行,每行2個整數,wi,vi,分別表示物品的重量和價值。10 50 20 6 30 15 1 251 ...

樹上揹包 可憐與超市

發現商品間的關係顯然是棵樹,所以做樹上揹包。發現商品的 都很高不能放在狀態裡,而價值都是1,所以轉換維度。定義 dp u j 0 1 為在 u 的子樹中選出 j 個物品所需要的最小 其中0代表不用優惠券買u,1代表用優惠券買u。轉移 sum sum dp u j k 1 min dp u j k 1...

揹包dp 小明打聯盟

這個題是乙個完全揹包問題,對於大招,我們有三種選擇 l,l i,r l,l i,r l,l i,r,最終的方案中l i l i l i最多出現一次,於是先用前三個 物品 l r 前三個物品 l r 前三個物品 l r這五個物品跑完全揹包,然後用l i l i l i更新一遍dp v dp v dp ...