2011-11-29 21 views
0

你決定在騎自行車的時候給予一個投籃,而 平衡你雙手的重量。爲了確保您不會跌倒,您希望手中的權重可以達到多達 的平衡(即您手中任一手指的 之間的權重總和之間的差異必須儘可能小)。鑑於您的重量,您需要確定左側 與右手之間的最小重量差異。我將如何使用PHP回答這個問題?

樣品輸入:1個10 6

樣本輸出:3

而且,你不必使用所有的權重,但你不能使用0的權重。我在想,遞歸函數是解決這個問題的最好方法。

順便說一下,這不是我的家庭作業或任何事情,這是關於過去Dwite比賽的問題。

+1

屬於基於您的規則rentacoder.com –

+0

,樣品輸出** **錯誤。它不應該是1嗎? –

+0

這是裝箱問題或揹包問題的重新表述。 – Neil

回答

0

我的PHP是一個有點生疏,但這樣的事情應該工作:

$left = 0; $right = 0; 
for_each($input as $value) { 
    if ($left < $right) { 
    $left += $value; 
    } else { 
    $right += $value; 
    } 
} 
$answer = abs($left - $right); 
+0

剛剛意識到這種算法適用於樣本輸入,但如果輸入不同則會中斷。 –