最近看《劍指offer第二版》有這麼一道面試題:
題目:給你一根長度為n的繩子,請把繩子剪成m段 (m和n都是整數,n>1並且m>1)每段繩子的長度記為k[0],k[1],…,k[m].請問k[0]k[1]…k[m]可能的最大乘積是多少?例如,當繩子的長度為8時,我們把它剪成長度分別為2,3,3的三段,此時得到的最大乘積是18。書上講了一種貪婪演算法:
當n≥5時,我們盡可能多地減長度為3的繩子;當剩下的繩子長度為4時,把繩子剪成兩段長度為2的繩子(其實這時候沒必要再減了,只不過題目要求至少剪一刀)。
首先,當n≥5時,我們可以證明2(n-2)>n並且3(n-3)>n。也就是說,當繩子剩下的長度大於或者等於5的時候,我們就能把它剪成長度為3或者2的繩子段。另外,當n≥5時,3(n-3)≥2(n-2),因此我們應該盡可能多地剪長度為3的繩子段。下面是我的思路,首先是基本不等式的推廣:
一般地,若a1,a2,a3,...an是正實數,則有
\[\frac\ge\sqrt[n]
\]所以可以把這道題轉換成下面這個問題:
已知函式:
\[f(m)=(n/m)^m
\]當m取幾的時候,f(m)最大?條件是m和n/m都是正整數。
求導一下,得:
\[\frac = \,\ln n+\left(-\ln m-1\right)\,n^}\over}}
\]於是可得,當m≤n/e時,函式單調遞增;當m≥n/e時,函式單調遞減,所以當m=n/e時(此時n/m=e),f(m)取到最大值(e是自然常數)。下面是f(m)的影象:
但是n/e和e顯然不是正整數(條件是m和n/m都是正整數),這時候取離n/e最近的兩個整數橫座標就行,但是這時候n/m(也就是每段繩子的長度)不一定是整數!而且之前的大前提是每段繩子長度都相等時才取到最大值(也就是基本不等式中的a1,a2,...都相等時取等號)。這我就很尷尬了。
沒辦法,只能換個思路。根據題意可以得出公式:f(n)=max(i×f(n-i)),其中1≤i≤n, n≥1, 且n,i都是整數。這裡的i就相當於第一刀剪了長度為i的一段,然後這段就確定了,之後再也不會剪了。
我們設g(i)=i×f(n-i)
當i≥5時:
i×f(n-i)≤(i-2)×2×f(n-i) //因為當i≥5時,有i≤(i-2)×2
i×f(n-i)≤(i-2)×f(n-i+2) //因為2×f(n-i)=2×f(n-i+2-2)≤f(n-i+2),(因為f(n)=max(i×f(n-i)),這裡n取n-i+2,i取2就行了)
i×f(n-i)≤(i-2)×f(n-(i-2))
即g(i)≤g(i-2)
這個結論告訴我們:
g(3)≥g(5)≥g(7)≥g(9)≥...
g(4)≥g(6)≥g(8)≥g(10)≥...
而如果我們能證明g(1)、g(2)、g(4)都小於g(3)的話,那麼g(3)就是所有g(i)中最大的。(至於為什麼是3,因為一會兒會在g(2)和g(3)中決勝負)
首先如果g(1)是最大的,那就說明f(n)=1×f(n-1),這樣的話對於任意的n, f(n)都相等,顯然矛盾。
其次,g(4) = 2×2×f(n-4) ≤ 2f(n-2) = g(2)
所以,最終就是要比較g(2)和g(3)誰大,沒辦法只能祭出大招了,數學歸納法。
當n=5時,有3f(2) ≥ 2f(3),所以g(3) ≥ g(2)成立
當n=6時,有3f(3) ≥ 2f(4),所以g(3) ≥ g(2)成立
假設當n=k時,3f(k-3) ≥ 2f(k-2)成立,從而得到f(k)=3f(k-3)
n=k+1時,3f(k+1-3) ≥ 2f(k+1-2)成立,即3f(k-2) ≥ 2f(k-1),從而得到f(k+1)=3f(k+1-3)
當n=k+3時,
需要證明3f(k+3-3) ≥ 2(k+3-2)
就是要證明3f(k) ≥ 2(k+1)
就是要證明3(3f(k-3)) ≥ 2(3f(k+1-3))
就是要證明3f(k-3) ≥ 2f(k-2)
證明完畢
( 其實還要再手動算個n=7的情況,這樣就可以這樣推導了:(5,6)=>8 ; (6,7)=>9 ; (7,8)=>10 ; (8,9)=>11 ;...)
所以現在就可以得到g(3)≥g(i)的結論了,所以f(n)=3f(n-3),因為i≥5,所以n肯定也要≥5。
一道有趣的數學證明題
j 0n k j 1ncj nckn k j nc 22n2 從北京到廣州兩個半小時的飛機,上飛機前把題目抄在草稿紙上,心想飛機上無聊正好把這題給做了,做完看看電影睡睡覺估計就到了。然而這道題著實做了兩個半小時,距離降落30分鐘才搞定完整的解法,把解法在整理一遍的時間都不夠。在飛機上一萬次想開啟手機...
編譯原理(一道小證明題)
最近閒暇之餘看看編譯原理,娛樂一下,碰到一道小小證明題,於是心血來潮證明一下。lz也是數學專業畢業的,當初上大學時每天做的最多的就是多達n個黑板的證明題,可惜啊,時光是殘酷的,現在已不復往日了。不過看到證明題,尤其是簡單的證明題,lz積蓄了多年的數學細胞又被激發起來了,這就是青春啊,神馬 致青春 的...
高數證明題思路
基本思路 利用逆向思維,構造輔助函式 即從結論出發尋找思路 tips 可以用原函式法找輔助函式 有時可以對導數用中值定理。若結論為不等式,就要注意適當放大或縮小的技巧。當要證明某個函式的導數的某一點處其導數值為常數或0時,應用羅爾定理可以求證。證明含乙個中值的等式或根的存在,多用羅爾定理 可以用原函...