显示代码纯文本
#include <cstdio>
using namespace std;
int f[40001],w[10000001],v[10000001],squ[10000]={1};
int main(void)
{
freopen("treasure.in","r",stdin);
freopen("treasure.out","w",stdout);
int i,j,temp,n,W,c=0,vt,wt,mt;
for (i=1;i<10000;i++)
squ[i]=2*squ[i-1];
scanf("%d%d",&n,&W);
for (i=0;i<n;i++)
{
scanf("%d%d%d",&vt,&wt,&mt);
for (j=0;squ[j]<=mt;j++)
{
v[c]=vt*squ[j];
w[c]=wt*squ[j];
c++;
mt-=squ[j];
}
if (mt)
{
v[c]=vt*mt;
w[c]=wt*mt;
c++;
}
}
for (i=0;i<c;i++)
for (j=W;j>=w[i];j--)
{
temp=f[j-w[i]]+v[i];
if (f[j]<temp)
f[j]=temp;
}
printf("%d\n",f[W]);
return(0);
}