题目描述:对一个给定正整数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 }