求助丨动态规划-剪绳子题
1435
2024.01.10
发布于 未知归属地

动态规划问题-剪绳子

题目

给你一根长度为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。

代码

class Solution:
    def cutrope(self, n):
        if n < 2:
            return 0
        if n == 2:
            return 1
        if n == 3:
            return 2
        products = [0] * (n + 1)
        products[1] = 1
        products[2] = 2
        products[3] = 3

        for i in range(4, n + 1):
            max_num = 0
            for j in range(1, i//2 + 1):
                product = products[j] * products[i - j]
                if product > max_num:
                    max_num = product
            products[i] = max_num
        return products[n]
if __name__ == "__main__":
    a = Solution()
    print(a.cutrope(8))

疑问

这是我在看剑指offer剪绳子问题时,仿照书上写下来的代码,问题一:为什么products[3] = 3?问题二:题目是给你一根长度为n的绳子,请把绳子剪成m段,为什么树上的代码只有一个入参n,没有入参m,我想说的是,书上的代码是不是没有按照题目要求来写。

麻烦大佬指点一下

评论 (10)