top1编程
← 返回题目
题解

【基础】分组背包问题

1 条题解

  • 0
    @ 2026-7-29 0:18:11
    #include<bits/stdc++.h>
    using namespace std;
    int f[105],v[105],w[105];
    int main(){
        int N,V;
        scanf("%d%d",&N,&V);
        for(int i=1;i<=N;i++){
            int S;
            scanf("%d",&S);
            for(int j=1;j<=S;j++)scanf("%d%d",&v[j],&w[j]);
            for(int j=V;j>=0;j--){
                for(int k=1;k<=S;k++){
                    if(j>=v[k])f[j]=max(f[j],f[j-v[k]]+w[k]);
                }
            }
        }
        printf("%d&#92;n",f[V]);
        return 0;
    }
    
    • 1