P1757 通天之分组背包(分组背包基础)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=10009,K=109;
int n,V,v[N],w[N];
ll f[N];
vector<int> g[K];
int main(){
scanf("%d%d",&V,&n);
for(int i=1,tmp;i<=n;i++){
scanf("%d%d%d",&w[i],&v[i],&tmp);
g[tmp].push_back(i);
}
for(int i=1;i<=100;i++) if(!g[i].empty())
for(int j=V;j>=1;j--) for(int k:g[i]) if(j>=w[k])
f[j]=max(f[j],f[j-w[k]]+v[k]);
printf("%lld\n",f[V]);
return 0;
}

浙公网安备 33010602011771号