Integer Break
题意
给定一个数字n,让你将其拆分成至少两个数字相加的形式,使得拆分出来的序列乘积最大。
解法
题目提示将7到10进行拆分:
7 = 3+2+2
8 = 3+3+2
9 = 3+3+3
10 = 3+3+3+2+2
从中我们可以发现,拆分出来的序列都只包含3或者2,而且优先分配3,当且仅当n>4时我们一直分配3这个因子。
这个理论是可以被证明的,简单的来说,就是我们不需要一个>=4的因子,假如某个数字n有个因子x>=4,那么我们可以把这个因子拆分为 x = 2 + x-2,则2(x-2) = 2x-4 >= x,这个条件是当x>=4的情况下成立的。那么我们可拆分的因子就只有1,2,3。1就算了,因为它对乘积没有贡献,对于2和3来说,当它们的和相同时,比如6=2+2+2, 6=3+3,此时3\3 > 2*2*2的,所以我们要优先分配3。
代码
|
|