问题
解析
思路:轻者先装,直到再装任何集装箱将使轮船载重量超过C时停止。
定理:对于任何正整数k,算法(轻者先装)对k个集装箱的实例得到最优解。
证明:(数学归纳法)
设计
void ZeroOneKnapsack(){
for (int i = 0; i < n; i++) {
for (int j = c; j >= w[i]; --j) {
if (dp[j - w[i]] + 1 > dp[j]) {
dp[j] = dp[j - w[i]] + 1;
}
}
}
}
分析
时间复杂度:O(nlogn)
源码
GitHub