14- I. 剪绳子

image.png

动态规划:算法-动态规划 Dynamic Programming--从菜鸟到老鸟
求解的方式有两种:①自顶向下的备忘录法 ②自底向上。
一备忘录法也需要递归,因此一般用自底向上的方法,

思路一:动态规划,自底向上。

总体思路就是:从3的最大结果,计算到n的最大结果。
不同分割方式用递归完成
i表示当前计算的绳子长度,j表示分割的长度,i-j表示剩下的长度,每计算出一个结果都需要跟当前 i 对应的最大结果分割一次的结果剩下长度的最优结果进行对比。即:

dp[i]、j*(i-j)、j*dp[i-j]

操作:
image.png

  • 注意:

    • 需要计算到n,因此数组到n+1
    • j从2开始,因为割去1是无效的。
    • 也可从4开始递归,但是运行时间增加点点
      image.png

    思路二:贪心(找规律)

    image.png
    单看7,8,9

  • 3x4 除以3商:2 余:1 :3^(2-1)x4
  • 3x3x2 除以3商:2 余:2 :3^2x2
  • 3x3x3 除以3商:3 余:0 :3^3

    操作:

    image.png


MeeWoW
18 声望1 粉丝

加油