给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数n>1并且m≥1)。每段的绳子的长喥记为k[0]、k[1]、……、k[m]k[0]k[1]…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18
什麼是动态规划算法,先自上而下分析在长度为n的绳子所求为f(n),剪下一刀后剩下的两段长度是i和n-i在这个上面还可能继续减(子问题),所以:
然后自下而上的解决问题可以从f(1)开始向上计算并保存,最终获得f(n)的值
由于当i大于n//2时,就不用在计算了重复计算因此实际上:
所以应紦绳子剪成尽量多的3,让剩下的都是2这样的组合