商人胡萝卜问题

一个商人骑一头驴要穿越1000公里长的沙漠,去卖3000根胡萝卜。
 已知驴一次性可驮1000根胡萝卜,但每走1公里又要吃掉1根胡萝卜。
 问:商人最多可卖出多少胡萝卜?
 
 
  答案:
  带1000到200公里处,返回。如此往复,需要走五次,吃1000胡萝卜。可将2000胡萝卜带到200公里处。
  重复以上过程,把萝卜带到533公里处。需要走三次,走到后余下1001个胡萝卜。 
  扔掉一个。带上剩下的1000个。冲到终点。余下533个胡萝卜。
 533即为最终答案。
 
 做到这里不难。难的是怎么证明这个533 就是最优解!
  
 分析: 
  要使到达终点的萝卜最多,就不能浪费,要么到达了终点,要么被吃在了路上。
  所以要把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个萝卜时前进的最远呢 ? 嘿嘿,上面的方案!
  
  
  ------- 这个题目太难讲清楚了,有些东西,只可意会不可言传吧。
  
 

posted on 2011-04-04 21:39  台哥编程课堂  阅读(1222)  评论(0编辑  收藏  举报

导航