1 solutions

  • 0
    @ 2025-3-3 16:21:26

    C++ :

    #include <bits/stdc++.h>
    using namespace std;
    int n,V;
    struct kk {
    	int w,v,m;
    };
    kk a[1001];
    int f[20001];
    void completebag(int v,int w) {
    	for(register int i=v; i<=V; ++i)
    		f[i]=max(f[i],f[i-v]+w);
    	return;
    }
    void zeronebag(int v,int w) {
    	for(register int i=V; i>=v; --i)
    		f[i]=max(f[i],f[i-v]+w);
    	return;
    }
    void multiplebag(int v,int w,int m) {
    	if(m*v>V) {
    		completebag(v,w);
    		return;
    	}
    	int k=1;
    	while(k<=m) {
    		zeronebag(v*k,w*k);
    		m-=k;
    		k*=2;
    	}
    	zeronebag(v*m,w*m);
    	return;
    }
    int main() {
    	scanf("%d%d",&n,&V);
    	for(register int i=1; i<=n; ++i)
    		scanf("%d%d%d",&a[i].v,&a[i].w,&a[i].m);
    	memset(f,0x0,sizeof(f));
    	for(register int i=1; i<=n; ++i) {
    		if(a[i].m==-1) zeronebag(a[i].v,a[i].w);
    		if(a[i].m==0) completebag(a[i].v,a[i].w);
    		if(a[i].m>0) multiplebag(a[i].v,a[i].w,a[i].m);
    	}
    	printf("%d\n",f[V]);
    
    	return 0;
    }
    
    
    • 1

    Information

    ID
    9947
    Time
    1000ms
    Memory
    128MiB
    Difficulty
    (None)
    Tags
    # Submissions
    0
    Accepted
    0
    Uploaded By