整數拆分最大乘積


其實是一個挺 trivial 的東西吧,事實上早在今年 1 月,我就在 CF986D 這道題中見過這個東西,今天只是碰巧又遇到了個這樣的題后把這東西單獨拎出來配合上我自己瞎 yy 的證明后合成了一篇博客而已(bushi)

模型:給定正整數 \(n\)​,要你構造出若干個由正整數組成的序列 \(b_1,b_2,\cdots,b_m\)​​,使得 \(\sum\limits_{i=1}^mb_i=n\)\(\prod\limits_{i=1}^mb_i\) 最大。

結論:設 \(f(n)\) 表示 \(\prod\limits_{i=1}^mb_i\) 的最大值,那么有:

\[f(n)=\begin{cases} 1&(n=1)\\ 3^{n/3}&(n\equiv 0\pmod{3})\\ 3^{(n-2)/3}·2&(n\equiv 2\pmod{3})\\ 3^{(n-4)/3}·4&(n\equiv 2\pmod{3}\&n\ne 1) \end{cases} \]

證明:我們先不考慮整數這個條件,先假定序列中的數可以是任意正實數,那么很容易發現的一個性質是,序列只能由相同的數組成,否則,假設序列中出現了 \(x,y\) 兩種不同的數(\(x\ne y\)),那么我們可以將它們都調整為 \(\dfrac{x+y}{2}\),這樣和不變並且乘積最大,也就是說我們假設序列中唯一的數為 \(x\),那么 \(\prod\limits_{i=1}^mb_i=x^{n/x}\),我們要求當 \(x\) 為何值時,\(x^{n/x}\) 最大。

考慮一個非常常用的套路:取 \(\ln\)​,顯然取完 \(\ln\)​ 后式子可寫作 \(\dfrac{n}{x}·\ln x\)​,此時 \(n\)​ 變成了常數可以把它拿走,故我們只需求出 \(\dfrac{\ln x}{x}\) 在何處取到最大值即可。再考慮求導,\((\dfrac{\ln x}{x})’=\dfrac{1-\ln x}{x^2}\),由於 \(x>0\)\(\ln x\)\((0,\infty)\) 上為增函數,\(\dfrac{1-\ln x}{x^2}>0\Leftrightarrow x<e\),故 \(x=e\) 時上式取到最大值。

也就是說,如果我們可以往序列里塞實數,那么我們肯定會選擇往序列中塞滿 \(e\),但是這里要求序列中的數必須是整數,該怎么辦呢?

注意到一個事實,那就是 \(e=2.71828…\approx 3\),也就是說我們感性理解一下肯定會選擇多拆出一些 \(3\),事實也確實是這樣的,\(3^2>2^3,3^4>4^3\),而根據上面的分析,\(x^{n/x}\) 是單峰函數,因此極值點肯定在 \(3\) 附近取到,換句話說,如果這里的 \(n\) 足夠整,整到它是 \(1,2,3,\cdots\) 的公倍數,那么全拆 \(3\) 肯定比全拆 \(2\)\(4\)\(5\) 或 …… 更優。

我們特判掉 \(n=1\) 的情況,此時答案肯定就是 \(1\)。如果 \(n\)\(3\) 的倍數那肯定全拆 \(3\) 最優。如果 \(n\equiv 2\pmod{3}\),那么全拆 \(3\) 后會剩一個零頭,直接把這個零頭單獨分一組即可。如果 \(n\equiv 1\pmod{3}\)\(n\ge 4\),這時需要格外注意,如果全拆 \(3\),最后會剩下一個 \(1\),由於乘以 \(1\) 等於啥也沒有,因此這樣反倒是不優的,正確方式是退一步,把最后一步的 \(4\) 拆成兩個 \(2\),這樣乘積可以達到最大值 \(4·3^{(n-4)/3}\)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM