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;
}

posted @ 2026-02-14 22:59  2025ing  阅读(0)  评论(0)    收藏  举报