說來慚愧 這麼easy的題目 我居然看代碼的時候還是抱着慣性思維去看 寫題目的時候也感覺自己被束縛了
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
struct node{
int w,p;
};
const int maxn = 1e3 + 10;
int dp[maxn];
vector<vector<node> > vec;
int main(){
int n,m;
cin >> m >> n;
vec.resize(100 + 10);
for(int i = 0 ; i< n ; ++i){
int w,p,g;
cin >> w >> p >> g;
vec[g].push_back(node{w,p});
}
for(auto it : vec){ //groups
for(int v = m ;v>=0 ;v--){
for(auto item : it){ //item in group
if(v >= item.w){
dp[v] = max(dp[v],dp[v - item.w] + item.p);
}
}
}
}
cout << dp[m] << endl;
return 0;
}
通常我們寫題目都會讓每一個商品都走一遍全程,分組揹包則是讓每一個格子中每一個商品都走一遍。