1 class Solution { 2 public: 3 int integerBreak(int n) { 4 int* dp = new int[n + 1]; 5 for(int i = 0; i < n + 1; ++i) dp[i] = 0; 6 dp[1] = 1; 7 for(int i = 2; i < n + 1; ++i){ 8 for(int j = 1; j < i; ++j) 9 dp[i] = max(dp[i], max(j, dp[j]) * max(i - j, dp[i - j])); 10 } 11 return dp[n]; 12 } 13 };
对于每个数字i,分为j和i-j两个部分,两个部分分别可以选择继续拆分和不拆分。