整数拆分最大乘积

其实是一个挺 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}\)

posted @ 2021-10-24 22:30  tzc_wk  阅读(241)  评论(2编辑  收藏  举报