1 solutions
-
0
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