【洛谷】分組揹包 P1757 通天之分組揹包
阿新 • • 發佈:2020-12-01
題目大意
現在有 \(n\) 個物品,每個物品有三個屬性 \(w,v,id\),分別表示這個物品的 重量 價值 以及所屬的組。
給出容量為 \(m\) 的揹包,同一個組的物品最多取一個,問可以取得的最大值。
題解
分組揹包模板題。
注意:先列舉揹包容量,再列舉同一個組中的物品
程式碼
#include<bits/stdc++.h> using namespace std; #define pb push_back typedef long long ll; typedef unsigned long long ull; const int inf=0x3f3f3f3f; const int mod=1e9+7; const int seed=233; const int N=1e3+10; vector<pair<int,int>>vec[N]; int dp[N]; int main() { int n,m; scanf("%d%d",&m,&n); for(int i=1;i<=n;i++){ int a,b,c; scanf("%d%d%d",&a,&b,&c); vec[c].pb(make_pair(a,b)); } for(int i=1;i<=n;i++){ if(!vec[i].size()) continue; for(int j=m;j>=0;j--){ for(int k=0;k<vec[i].size();k++){ if(j>=vec[i][k].first) dp[j]=max(dp[j],dp[j-vec[i][k].first]+vec[i][k].second); } } } printf("%d\n",dp[m]); return 0; }