猴子背香蕉問題
問題描述
有一個猴子,身邊有100根香蕉,一次最多背50根,離家50步。它揹着香蕉每走一步都會吃掉一根,請問到家時,它最多剩下幾根?
個人思路
我覺得要抓住一點,就是如何達到最優:走同樣多的路程,每次儘可能地多背,因爲少走一趟一定比多走一趟消耗的香蕉少。
於是,問題就成了“什麼樣的策略下,算是‘多背’、‘少走’呢?”。
對於給出的條件,你想啊,‘多背’肯定是背完50根香蕉對吧;‘少走’的話就依賴於前一次走過的路程,比如這題,如果我一次性走完(50步),那麼一點也不剩,如果我走兩次,這怎麼走呢?別忘了要滿足‘多背’的原則,那麼第二次我也希望能背50根香蕉!於是,第一次就走25步,100-25*2=50,正好第二次可以背完,且滿足‘多背’!。
推廣
猴子有x根香蕉,最多背y根,離家z步,求最多香蕉數目?
- x -= x%y;
- 走y/2步(y/2>=z),背y個香蕉,然後折返,重複2直到背完香蕉(第一步要去掉“零頭”就是爲了防止猴子爲了拿少於y/2個香蕉而回不來……);
- 一直重複2,直到到達目的地或者永遠到不了。