题源:Leetcode
链接:https://leetcode-cn.com/problems/integer-break/
很显然,最少分成两个整数,所以有以下推导:
dp[i] = max(j*(i-j),j*dp[i-j])
代码如下:
1 class Solution { 2 public: 3 int integerBreak(int n) { 4 vector <int> dp(n + 1); 5 for (int i = 2; i <= n; i++) { 6 int curMax = 0; 7 for (int j = 1; j < i; j++) { 8 curMax = max(curMax, max(j * (i - j), j * dp[i - j])); 9 } 10 dp[i] = curMax; 11 } 12 return dp[n]; 13 } 14 };