1 条题解
-
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
信息
- ID
- 1961
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者