转自:http://www.blogbus.com/yjq24-logs/41404333.html
若干个正整数的和为S,求它们乘积的最大值F(S).
其实这是一个分解的问题,给定的S,分解成若干个正整数的和,然后求乘积的最大值。
S=a[1]+a[2]+…+a[n],F(S)=a[1]a[2]…a[n]
根据局部调整法分析所得到的A-G不等式,可以认为把S分成的都相等的n份是最好的,如果不能均分也应当使每个数尽量接近。
下面是题解,从每个a[k]的大小入手:
1)不可能存在某个a[i]=1,否则 1+a[k]>1*a[k];
2)不可能存在某个a[i]>=5,否则 2*(a[i]-2)>a[i];
3)不可能存在两个以上的2,否则 3*3>2*2*2;
4)当分解中出现4时,由于2*2=2+2,故可把4认为是两个2,故认为不会出现4;
综合以上4条,知a[k]由大部分的3构成,少部分的2构成.
故分解方法就是先分3,然后考虑S模3余2就再分一个2,S模3余1就少给一个3,再分两个2
最后整理如下,
当S>4时,记S=3p+q,其中p=floor[S/3],0<=q<3
F(S)=3^p as q=0,S=3p;
F(S)=4*3^(p-1) as q=1,S=3p+1;
F(S)=2*3^p as p=2,S=3p+2;
这道题还有一些思考空间,其实整个分发可以用两点来概括,3最多 和 没有1,满足这两点的分发就唯一确定了。
如果把题目限定的正整数改成正实数,那么结果会如何?
实数的话我们就可以直接用A-G不等式了,
,这个函数 取完对数两边求导可以知道驻点在
所以如果S=ke(k=1,2,3,…)的话.那直接分成k个e就是使乘积最大了;
如果S不能被e整除也没关系,比较一下把S分成floor(S/e)等份和floor(S/e)+1等份哪个更大就行了.
这就能解释为什么离散情况下我们需要尽可能多的3和少量的2了,因为3是最接近e的整数,2次之.