int w[maxn],v[maxn],t[maxn],n,load; int F[maxload];
intmain(){ fin >> n >> load; for (int i=0; i!=n; ++i) fin >> w[i] >> v[i] >> t[i];//读入
memset(F,-1,sizeof(F));//整个数组清为-1 F[0]=0;//但是第0位要为0 for (int i=0; i!=n; ++i) { int P=1; for (;((P<<1)<=t[i]);P<<=1) //二进制捆绑 for (int j=load-P*w[i]; j>=0; --j)//倒着的 if (F[j]!=-1)//当前容量不为-1才行 F[j+P*w[i]]=max(F[j]+P*v[i],F[j+P*w[i]]); P=t[i]-(P>>1); if (P==0) continue; for (int j=load-P*w[i]; j>=0; --j) if (F[j]!=-1) F[j+P*w[i]]=max(F[j]+P*v[i],F[j+P*w[i]]); }