对于一个容量为 $V$ 的背包,有 $N$ 种物品,每种物品的重量 $cost_i$ , 价值 $val_i$ ,数量 $num_i$ 。

for(int i = 1; i <= N; i++) {
    for(int j = V; j >= 0; j--) {
        for(int k = 0; k <= num[i]; k++) {
            if(j >= k * cost[i]) {
                dp[j] = max(dp[j], dp[j - k * cost[i]] + k * val[i]);
            }
        }
    }
}