可以用dp做,但是时间复杂度O(n^2),空间复杂度O(n),效果很不理想,尽管这道题考察的是dp。
但是算法的根本目的是以最高性能解决实际问题。这里贴一个数学方法。
int integerBreak(int n)
{
if (n <= 2)return 1;
if (n == 3)return 2;
int i = 0, a = 1;
while (n > 4)
{
n -= 3;
a *= 3;
}
return a * n;
}
思路:尽可能多的划分整数3。数学证明方法太多太复杂就不贴了,自己往后写几个观查一下规律就明白了。