参考文献
背包九讲——全篇详细理解与代码实现
https://blog.csdn.net/yandaoqiusheng/article/details/84782655?spm=1001.2014.3001.5501
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int N,V,v,w,s,dp[2010];
int main() {
cin>>N>>V;
for(int i=0;i<N;++i){ // 遍历物品种类
cin>>v>>w>>s;
s=min(s,V/v);
for(int k=1;s>0;k<<=1){
// 把s拆分成体积和价值为1,2,4,...,2^m,s-2^m倍的物品
if(k>s) k=s;
s-=k;
for(int j=V;j>=v*k;--j) // 遍历背包体积
dp[j]=max(dp[j],dp[j-k*v]+k*w);
}
}
cout<<dp[V];
}