出處:
乙個商人騎一頭驢要穿越1000公里長的沙漠,去賣3000根胡蘿蔔。 已知驢一次性可馱1000根胡蘿蔔,但每走1公里又要吃掉1根胡蘿蔔。 問:商人最多可賣出多少胡蘿蔔?
要使到達終點的蘿蔔最多,就不能浪費,要麼到達了終點,要麼被吃在了路上。 所以要把3000個蘿蔔整體的前移,一次只可以帶1000個蘿蔔,所以3000個要都前移需要出去回來、出去回來、再出去。 同樣的路要走5次。走到哪個點呢? 200公里處! 為什麼? 注意了,200公里來回5次的話剛好可以剩下2000個胡蘿蔔! 而2000個蘿蔔要整體前移,需要的不是走5次,而是3次! 所以如果走的超過200公里,則超過的部分相對就多吃了蘿蔔。 再把2000個蘿蔔朝前移動,需要走三次,走到**呢? 再往前走333公里吧,也就是533公里處。 為什麼呢? 同上面的道理,因為走三趟333公里後,剩下的剛好是1001個蘿蔔!是最接近1000且大於1000的數字。如果走多了,則剩下的 蘿蔔會少於1000,這多走的部分相對我們這裡的方案會多吃蘿蔔滴。 好了,到533公里處了,現在有1001個蘿蔔,扔1個吧, 是有點可惜,可你有什麼辦法,或者你也可以把它吃了。然後帶上剩下的1000個蘿蔔,朝終點衝吧。後面還有467公里。到達終點時,所剩下的就是533個蘿蔔。最終剩下的蘿蔔數 = 花費2000個蘿蔔所能前進的公里數
這2000個蘿蔔的價值不只是讓你前進了一段距離,而且會使你在走花費完它們後手頭還有1000個蘿蔔! 如何能讓2000個蘿蔔的價值最大,也就是在手頭有1000個蘿蔔時前進的最遠呢 ? 嘿嘿,上面的方案!
答案:帶1000到200公里處,返回。如此往復,需要走五次,吃1000胡蘿蔔。可將2000胡蘿蔔帶到200公里處。 重複以上過程,把蘿蔔帶到533公里處。需要走三次,走到後餘下1001個胡蘿蔔。 扔掉乙個。帶上剩下的1000個。衝到終點。餘下533個胡蘿蔔。 533即為最終答案。 做到這裡不難。難的是怎麼證明這個533 就是最優解!
//胡蘿蔔問題
#include
#include
using
namespace
std;
intmain()
//如果要回去多次搬運,則往返路程要計算好。兩次搬運要走三次路。
if(x == 2
)
//如果要回去多次搬運,則往返路程要計算好。三次搬運要走五次路。一次搬運當然就一次路就ok了。
else
if(x == 3
)
//讓驢吃掉的蘿蔔。
n -=x;
}
cout
<< "
商人最多可賣出的胡蘿蔔數量為:
商人可賣出多少根胡蘿蔔
乙個商人騎一頭驢要穿越 1000 公里的沙漠,去賣 3000 根胡蘿蔔。已知驢一次性可馱 1000 根胡蘿蔔,但每走一公里就要吃掉一根胡蘿蔔。問 商人可賣出多少根胡蘿蔔?商人可賣出 534 根胡蘿蔔。可以把 1000 公里分為三段。1 第一段保證運到第一儲存點 2000 根。來回總共走了 5 次這段...
胡蘿蔔 題解
兔子經常感到飢餓,所以當他們外出吃胡蘿蔔時,他們會盡快跳起來。胡蘿蔔種植在一條數軸上。最初,兔子站在整數字置init。設兔子當前位置在整數x,她可以在單次跳躍中跳到位置4 x 3或位置8 x 7。它最多可以跳躍100000次。胡蘿蔔種植在x位置,當且僅當x可被1000000007整除時 即胡蘿蔔種植...
胡蘿蔔生魚湯
口味 鮮嫩 菜系 清真 做法 湯煲沙鍋 主料 魚肉 使用材料 生魚約 克,豬瘦肉 克,胡蘿蔔 克,紅棗 個,陳皮 小片。烹調方法 胡蘿蔔去皮洗淨,切厚片,紅棗 去核 陳皮 浸軟 去白 洗淨。豬瘦肉冼淨,切塊 生魚去磷 鰓 腸臟,洗淨,抹乾水,下油起鍋稍煎黃。把全部用料放放開水鍋內,武水煮沸後,文火煲...