额用鼠标把胡萝卜偷搬给你:)

来源: 偶尔完完 2015-11-15 16:57:39 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 次 (2457 bytes)
回答: 这个已经玄幻了想胖就胖2015-11-15 01:17:07

用数学解决问题,合适的抽象化往往带来效益,这时若有特殊例外先记下来,然后检验或补救。这样一般都能事半功倍。我们先弄清楚优化的必要条件:

 

运输会消耗资源,要运最多的资源到终点,每次运输必须满载(例外:不可避免时),将不再回返地点的资源耗尽,来挪前其他的。不难证明,不满足这条件的方案一定还有改进的空间(例外:不能园整的小数部分)。所以最优方案就是消耗一些资源,把其余的全部往前移。

 

基于上述的要求,如果资源只有1000根胡萝卜,驴子满载走完这1000公里,也把它吃完了,运了0根。如果资源不仅如此,就能消耗一些建立中转站,最后的中转站离目的地不到1000公里,满载从这里出发扣去路上消耗的就是运达的数量。最大化运达数量,就是想办法让这最后的中转站,尽量靠近目的地。

 

考虑有1000N资源,这里N>1是整数,因为要满载及把留在出发地的资源耗尽,所以要运N次,往返共2N-1趟。要让下一程每次都能满载,这一程要消耗1000资源(不是1000的倍数,下程不能满载,多于1000的倍数,不如放在下一程往返更少的路程消耗,可以走更远),这得出这一程走的距离是1000/(2N-1)公里(例外:出发地离终点少于这距离时)。假定驴子一次要吃一整根胡萝卜,这个里程数必须是把小数去掉的整数部分,记为[1000/(2N-1)]。

 

因为这N次的运输已经把1000N的资源全部运离出发地,途中消耗了1000,所以将剩下的1000(N-1)的资源全部运近了[1000/(2N-1)]公里处的中转站。只要不遇到例外的情况,重复应用上述的方法,不浪费资源地把剩余的全部移近目的地,到了N=1,可以将∑[1000/(2n-1)],n=2,…,N数量的资源运达目的地了。

 

将算法用到这具体的例子。不难验证它都不会出现例外的情况,那答案便是[1000/3]+ [1000/5] =533。

 

请您先登陆,再发跟帖!

发现Adblock插件

如要继续浏览
请支持本站 请务必在本站关闭Adblock

关闭Adblock后 请点击

请参考如何关闭Adblock

安装Adblock plus用户请点击浏览器图标
选择“Disable on www.wenxuecity.com”

安装Adblock用户请点击图标
选择“don't run on pages on this domain”