题目描述:对一个给定正整数n,划分成若干个整数之和,然后这些整数的乘积最大

我一开始给的思路是:

进行递归,F(n) = max(F(n-i)*F(i))(1<=i<=n)

然后优化,存备忘录;

但是貌似面试官还是不满意,他提示说可以分解成几个固定的数;

然后开始推规律,也就是F(n)最后能表示成F(2)和F(3)的乘积

代码如下:

 1 #include <iostream>
 2 #include <queue>
 3 #include <climits>
 4 #include <algorithm>
 5 #include <memory.h>
 6 #include <stdio.h>
 7 #include <ostream>
 8 #include <vector>
 9 #include <list>
10 #include <cmath>
11 using namespace std;
12 
13 int fun(int n)
14 {
15     int number2 = 0;
16     int number3 = 0;
17     if(n == 1 ||n == 2 || n == 3)
18         return n;
19     if(n%3 == 0)
20         number3 += n/3;
21     else if(n%3 == 1)
22     {
23         number2 += 2;
24         number3 += (n-4)/3;
25     }
26     else
27     {
28         number2 += 1;
29         number3 += (n-2)/3;
30     }
31     return pow(2,number2)*pow(3,number3);
32 }
33 
34 int main()
35 {
36     cout<<fun(5)<<endl;
37     return 0;
38 }