題意:給n件物品和乙個容積為v的揹包,有些物品只可以拿一次,有些物品可以無限拿,有些物品可拿規定的次數,問你在揹包容量內,可獲得最大的價值是多少。
思路:把不同的物品種類分開處理即可。注意多重揹包應該使用二進位制優化與01揹包視為同類處理,否則tle
#include
using
namespace std;
typedef
long
long ll;
const
int n=
1e5+5;
const
int mod=
1e9+7;
const
int inf=
0x7fffffff
;const ll llinf=
0x7fffffffffffffff
;const
double eps=
1e-10
;#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define pb push_back
#define pii pair
#define pll pair
#define debug cout<<"debug"<#define ls p<<1
#define rs p<<1|1
//#define int long long
struct node
a[n]
;int dp[n]
;signed
main()
else
a[++cnt]
.w=w*s;
a[cnt]
.v=v*s;
a[cnt]
.s=-1;
}}for(
int i=
1;i<=cnt;i++)}
else}}
cout<;}
0 1 完全揹包 多重揹包問題 混合揹包
0 1揹包問題 dp i j 表示前i件物品,體積容量為j的揹包所能獲得的最大價值 決策是第i個物品選不選 轉移方程 dp i j max dp i 1 j dp i 1 j v i w i n為物品數量,m為揹包體積 for int i 1 i n i for int j 0 j m j if j...
揹包問題 01揹包 完全揹包 多重揹包
01揹包和完全揹包的區別 01揹包的侷限在於每樣物品只有一種,每個物品都有乙個屬於自己的價值和重量,在給定的物品中選出揹包所能容納的最大重量,要求是價值最大 完全揹包與01揹包的不同在於完全揹包不限制每樣物品的個數,物品的價值和質量都與01揹包一樣,也同樣是求在給定大小的容量中,找出最大價值的選擇 ...
揹包問題(01揹包,完全揹包,多重揹包)
揹包問題 01揹包,完全揹包,多重揹包 近日為以下瑣事煩身 差不多要向學院提交專案申請了,本來是想做個多模式的im系統的,可是跟往屆通過審核的專案比起來,缺乏創新和研究價值,所以在文件上要多做手腳,花點心思。揹包問題,經典有揹包九講。不死族的巫妖王發工資拉,死亡騎士拿到一張n元的鈔票 記住,只有一張...