洛谷1757(分组背包)
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int maxn = 110;
vector<int> w[maxn];
vector<int> v[maxn];
int dp[1100];
int n, m;
int main()
{
cin >> m >> n;
int a, b, c;
int g = 0;
for(int i = 0; i < n; i++)
{
scanf("%d%d%d", &a, &b, &c);
w[c].push_back(a);
v[c].push_back(b);
g = max(g, c);
}
for(int i = 1; i <= g; i++) //组数
{
for(int j = m; j >= 0; j--) //容量一维逆序
{
for(int k = 0; k < w[i].size(); k++) //每组件数
{
int tw = w[i][k];
int tv = v[i][k];
if(j >= tw)
dp[j] = max(dp[j], dp[j - tw] + tv);
}
}
}
cout << dp[m] << endl;
return 0;
}