https://leetcode.cn/problems/integer-break/
这题剑指offer的代码感觉定义dp方程不清晰 此处重新写 一下
dp[i]:至少剪成>=2段的最大乘积
那么状态转移方程就是
dp[i] = max(dp[i], 剪成2段, dp[j] * (i-j))
也就是 dp[i] = max( dp[i], max(j * (i-j), dp[j] * (i-j)) );
class Solution {
public:
int integerBreak(int n) {
if(n <= 1) return 0;
vector<int>dp(n+1, 0);
for (int i = 2; i <= n; i++) {
for (int j = 1; j < i; j++) {
dp[i] = max( dp[i], max(j * (i-j), dp[j] * (i-j)) );
}
}
return dp[n];
}
};