https://www.luogu.com.cn/problem/P1757
思路:分組揹包裸題。
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
#define eps 1e-8
#define pr pair<int,int>
using namespace std;
typedef long long ll;
const int maxn=1005;
int n,m;
int dp[maxn],w[maxn],v[maxn];
vector<int> vec[maxn];
int main()
{
int k=0,id;
scanf("%d%d",&m,&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&w[i],&v[i],&id);
vec[id].push_back(i);
k=max(k,id);
}
for(int i=1;i<=k;i++)
{
for(int j=m;j>=0;j--)
{
bool flag=0;
int siz=vec[i].size();
for(int x=0;x<siz;x++)
if(j>=w[vec[i][x]])
flag=1,dp[j]=max(dp[j],dp[j-w[vec[i][x]]]+v[vec[i][x]]);
if(!flag)
break;
}
}
printf("%d\n",dp[m]);
return 0;
}