我想在C#中遞歸地解決揹包問題。這是我的代碼:在揹包裏找到物品
public int f(int n, int remain)
{
if (n < 0) return 0;
if (w[n] > remain)
{
// Thread.VolatileWrite(ref check[n], 0);
check[n] = 0;
return f(n - 1, remain);
}
else
{
int a = f(n - 1, remain);
int b = p[n] + f(n - 1, remain - w[n]);
if (a >= b)
{
// Thread.VolatileWrite(ref check[n], 0);
check[n] = 0;
return a;
}
else
{
// Thread.VolatileWrite(ref check[n], 1);
check[n] = 1;
return b;
}
}
}
w
是持有權重和p
是包含價格的數組的數組。 n
是物品的數量,remain
是最大重量。我的問題是check
數組。我已經使用這個數組來存儲將會在包中的物品,但它並不總是有效,有時候解決方案是正確的,有時候不是。我已經嘗試了一切,但無法弄清楚。我該如何解決這個問題?
請包括特定輸入的量,實際結果與期望的結果不同。 f'的返回值是多少?找到的解決方案的重量? – Codor
返回值應該是正確的。注意修改遞歸內的校驗數組。嘗試每次複製數組,並將其返回到一個元組中。這不是最優的,但你可以更好地看到它 – rpax
@codor w是一個由wights組成的數組,p是一個由價格組成的數組... n是項目的數量並且是最大的懷疑 –