本文最后更新于603 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com
https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html
视频讲解:https://www.bilibili.com/video/BV1Mg411q7YJ
1.本题代码十分简单,但是思路确实是有点巧妙,本题对于数学证明还是需要一些理解的拆分一个数n 使之乘积最大,那么一定是拆分成m个近似相同的子数相乘才是最大的。
CPP
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n + 1, 0);
dp[2] = 1;
for(int i = 3; i <= n; i++){
for(int j = 1; j <= i/2; j++){
dp[i] = max(dp[i], max(j * (i - j), j * dp[i - j]));
}
}
return dp[n];
}
};