有乙個大小為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 ...