代码:
//多重背包问题 /* f[i] 总体积是i的情况下,最大价值是多少 for (int i = 0;i<n;i++) { for(int j = V;j>=v[i];j--) { f[j] = max(f[j],f[j-v[i]]+w[i],f[j-2*v[i]]+2*w[i]...) } } 1.f[i] = 0 f[V] 2.f[0] = 0 ,f[i] = inf, i != 0 max(f[0...m]) */ #include<iostream> #include<cstring> #include<algorithm> using namespace std; int N, V;//物品数和背包容量 const int NUM = 1005; int dp[NUM]; int main() { cin >> N >> V; for (int i = 0; i < N; i++) { int v, w, n;//输入每件物品的体积 价值 和 个数 cin >> v >> w >> n; for (int j = V; j >= 0; j--)//枚举所有的体积 { for (int k = 0; k <= n && k*v<=j; k++)//看看每个体积下的价值最大是多少 { dp[j] = max(dp[j], dp[j - k*v] + k*w);//在计算的过程中每次存储最大价值 } } } cout << dp[V] << endl; return 0; }