用重载列车运煤,每次可装1万吨,每行驶1公里耗煤1吨,起点处共有N万吨煤(简单起见N为正整数),请问最远可运至何处(是国营煤老板,成本不计,只要运到的数量大于0就算成功)?并求N→∞时的渐进形式。
分析:
说白了,这个问题就是问火车最远可以走多远,问题的关键是要尽可能地消耗完所有的煤。为了达成这个目的,需要来回多趟,并且尽可能用满列车的运载量。还有一个要求,就是不要在同一段路上消耗太多的煤。(即来回的次数尽可能少,下面的错误解法的错误就在于在前面的路消耗了太多的煤。)
得益于伍岭博友的启示,最优的做法应该是“逐步推进”,也就是说先把煤集中运到前方的一个点上(运输过程中会有消耗),然后再从前方的那个点出发,把煤运输到更前方的一个点上,如此重复下去,就得到最远的距离。下面对这个过程进行分析。
题目假设了N是正整数,当然,就算N不是整数也可以进行同样的分析。(事实上,假设N是整数并没有带来太大的方便。)我们这里用到“上取整函数”⌈x⌉,定义为不小于x的最小整数。
从原点出发,每次运输1万吨,运输到前方y万公里处,共来回运输⌈N⌉−1次,每次卸下一部分煤后,回到原点刚好消耗完。最后一次不用返回去,所以经过这样一折腾,火车在距离原点y处,并且那里剩下的煤量为
(⌈N⌉−1)(1−2y)+N+1−⌈N⌉−y=N+y−2y⌈N⌉
每一段路都是重复这个过程,用Ni表示每次剩下的煤量,用yi表示每次前进的路程,于是
Ni=Ni−1+yi−1−2yi−1⌈Ni−1⌉; i=1,2,…,N; N0=N
这是一个带有取整函数的递推问题,同时带有可调参数yi。稍微经过分析就可以发现,每一段路中,都是越靠近原点的那一段路,平均耗煤量越大。因此,每个yi都是越小越好,因此,最优的情况是所有的yi都有yi→0。
这是这样的一个过程:运煤,然后走一丁点的距离,卸煤,回去,然后运煤,走一丁点的距离,卸煤,回去。严格意义上来说,这种运作是无法实现的。但是,这不妨碍我们在数学上理解它。另一方面,连续的结果也可以作为离散的一个近似。那么
Ni−Ni−1yi−1=1−2⌈Ni−1⌉
当yi−1→0时,记Ni=N(s),s是到起点的距离,由导数的定义得
dN(s)ds=1−2⌈N(s)⌉
这是一道带有取整函数的微分方程。虽然取整函数使得我们不能直接应用我们教科书上的通解公式,但是某种意义上来说,这种方程更加简单。因为经过分段之后,它就是一道dydx=Constant的最简单的方程了。
以上的推导并没有基于N是整数。当然,现在看来,N是整数能够给出形式上比较简单的解。在N(s)∈(N−1,N]时,有
dN(s)ds=1−2N
它的解是
N(s)=(1−2N)s+N
这个解的生效区间是N(s)∈(N−1,N],即只维持一个单位,所以在第一步,火车走了12N−1。
第二步,在N(s)∈(N−2,N−1]时,有
dN(s)ds=1−2(N−1)
它的解是(每一步都重新选择原点)
N(s)=(3−2N)s+N−1
这个解的生效区间是N(s)∈(N−2,N−1],所以在第二步,火车走了12N−3。我们发现,这个过程是可以递推的,最终的结果是
S=1+13+⋯+12N−1
可以估算
12ln(2N−1)