gpt4 book ai didi

java - Java中Knapsack的递归解法

转载 作者:行者123 更新时间:2023-11-29 07:43:19 25 4
gpt4 key购买 nike

HERE背包问题给出了递归解决方案,但我无法理解。为什么没有检查W?如果 W(剩余重量)低于 0,我们不应该返回吗?如果 W 已经小于 0,那么在特定的递归调用中领先一步有何意义?

// Returns the maximum value that can be put in a knapsack of capacity W
int knapSack(int W, int wt[], int val[], int n)
{
// Base Case
if (n == 0 || W == 0)
return 0;

// If weight of the nth item is more than Knapsack capacity W, then
// this item cannot be included in the optimal solution
if (wt[n-1] > W)
return knapSack(W, wt, val, n-1);

// Return the maximum of two cases: (1) nth item included (2) not included
else return max( val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
knapSack(W, wt, val, n-1)
);
}

最佳答案

请注意,在每次递归调用中,W 的值也会更新。并且我们从剩余权重 W 中减去一个新的权重,只有当它小于 W 时。否则不能包括该重量。此处捕获此逻辑

if (wt[n-1] > W)
return knapSack(W, wt, val, n-1);

正如您在上面看到的,如果新权重大于剩余权重,我们不会通过将 n 的值减少 1 来包含它。如果它小于 W,我们将返回 Max of Knapsack,包括和不包括它。

return max( val[n-1] + knapSack(W-wt[n-1], wt, val, n-1),
knapSack(W, wt, val, n-1)

关于java - Java中Knapsack的递归解法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com