设m是一个正整数,现在要求将n分解为若干个互不相同的自然数的和,且使得这些自然数的乘积最大。 注意:这个问题不同于剪绳子问题,因为剪绳子问题可以使得每一段重复相等,而此问题必须使得划分出来的每一个数都互斥。
对于给定的正整数m,要求计算最优分解方案
输入只有1行,表示整数m
输入样例1:
10
输入样例2:
100
输出有两行 第一行表示整数m划分的各个自然数,每个数之间有一个空格,划分的数按照升序排列。 第二行表示这个最大的乘积。 输出样例1:
2 3 5 30
输出样例2:
2 3 5 6 7 8 9 10 11 12 13 14 21794572800
贪心算法。如果a+b=n,则|a-b|越小,那么ab越大,如老师所讲,可以将n分解成从2开始的连续自然数的和。 例如:输入n=10,则可以分解为 2、3、4,还剩下1不够5,把这个1倒着加,4 -> 5。 所以,最终分解为2,3,5,结果为23*5=30。
证明见贪心算法-最优分解
