洛谷:P1757 通天之分组背包

//P1757
#include <iostream>
#define max(a,b) ((a)<(b)?(b):(a))
using namespace std;
int maxcls,V,n,clsnum[1005],is[1005][1005];
int d[1000];
class item{public:
    int vol,val;
}input[1000];

int main(){
    int i,j,a,b,c,xx,yy;
    cin>>V>>n;
    for(i=1;i<=n;i++){
        cin>>a>>b>>c;
        input[i].vol=a;
        input[i].val=b;
        maxcls=max(maxcls,c);//总组数
        clsnum[c]++;//某组数
        is[c][clsnum[c]]=i;

    }
    for(yy=1;yy<=maxcls;yy++){
        for(xx=V;xx>=0;xx--){
            for(int ti=1;ti<=clsnum[yy];ti++){
                if(xx>=input[is[yy][ti]].vol)
                d[xx]=max(d[xx],
                    d[xx-input[is[yy][ti]].vol]+input[is[yy][ti]].val);
            }
        }
    }
    cout<<d[V]<<endl;
    return 0;
}
https://www.luogu.com.cn/problem/P1757
原文地址:https://www.cnblogs.com/forwhat00/p/13226958.html