你好,老师!我反复听这个例子,都没能理解这个递推关系。可以在这里套入视频中以4的作为例子再解释一下?
在老师代码 memo[i]= max3(memo[i], j * (i - j), j * memo[i - j]);
中的j * (i - j)
和j * memo[i - j]
分别在图中实例代表哪些数的乘积?尤其为什么j * memo[i - j]
可以作为备选项?
class Solution {
private:
int max3(int a, int b, int c) {
return max(a, max(b, c));
}
public:
int integerBreak(int n) {
assert(n >= 2);
// memo[i]表示将数字i分割(至少分割两部分)后得到的最大乘积
vector<int> memo(n + 1, -1);
// 自底向上:所以最小分成1, 1的最大乘积是1,所以1
memo[1] = 1;
for (int i = 2; i <= n; i++)
// 求解memo[i]
for (int j = 1; j <= i - 1; j++)
// j + (i-j)
memo[i]= max3(memo[i], j * (i - j), j * memo[i - j]);
return memo[n];
}
};
int main() {
return 0;
}
谢谢!!!