コード:
// 複数のナップザック問題は、 / * F Iの場合の総体積の[i]は、最大値は、数ある <;(N iは++ iはint型、I = 0)のための { ため(INT J = V J = V [I> ]; J) { F [J] = MAX(F [J]、F [JV [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 <アルゴリズム> 使用して 名前空間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; }