波波老师,Integer Break问题的动态规划解法中求memo[i]的时候为什么还要和memo[i]自己比较

来源:9-3 发现重叠子问题 Integer Break

慕仙0279751

2018-07-29

for(int i = 2;i <= n;i++){

    for(int j = 1;j <= i - 1;j++){

        memory[i] = max3(memory[i],j * (i - j),j * memory[i - j]);

    }

}


写回答

1回答

liuyubobobo

2018-07-29

在内层循环中,对于每一个当下的j,j*(i-j)是指把i分成两个数j和i-j得到的结果;j * memo[i - j])指的是把i分成多于两个数(至少三个数),其中有一个数字为j的结果。可以看出,这两个情况都至少有一个数字为j。但是memo[i]中存储的最优值,可能并没有一个数字j。所以,要将以前获得的memo[i]的最优值,和当下,考虑某一个具体的j时得到的最优值比较,选取最好的结果:)

0
0

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7410 学习 · 1150 问题

查看课程