题目
代码(首刷自解)
class Solution {
public:
int integerBreak(int n) {
if(n == 2)
return 1;
vector<int> dp(n+1);
dp[1] = 1; dp[2] = 2;
int ans = 0;
for(int i = 2; i <= n; i++) {
for(int j = 1; j <= i/2+1; j++) {
dp[i] = max(max(dp[i-j], i-j) * j, dp[i]);
}
ans = max(ans, dp[i]);
}
return ans;
}
};
代码(7.22 二刷看解析)
贪心
class Solution {
public:
int integerBreak(int n) {
if(n < 4)
return n-1;
int res = 1;
while(n > 4) {
res *= 3;
n -= 3;
}
return res * n;
}
};
DP
class Solution {
public:
int integerBreak(int n) {
vector<int> dp(n+1, 0);
vector<int> memo(n);
dp[1] = 1; dp[2] = 1;
int ans = 0;
for(int i = 2; i <= n; i++) {
for(int j = 1; j <= i/2; j++) {
dp[i] = max(dp[i], j*max(dp[i-j], i-j));
}
ans = max(ans, dp[i]);
}
return ans;
}
};