zoukankan      html  css  js  c++  java
  • 67、剪绳子

    给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n>1并且m>1,m<=n),每段绳子的长度记为k[1],...,k[m]。请问k[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。

    定义一个数组dp,其中dp[i]表示的是长度为i的绳子能得到的最大乘积。我们先把长度为i的绳子拆成两部分,一部分是j,另一部分是i-j,那么会有下面4种情况
    1,j和i-j都不能再拆了

    dp[i]=j*(i-j);
    2,j能拆,i-j不能拆

    dp[i]=dp[j]*(i-j);
    3,j不能拆,i-j能拆

    dp[i]=j*dp[i-j];
    4,j和i-j都能拆

    dp[i]=dp[j]*dp[i-j];
    我们取上面4种情况的最大值即可。我们把它整理一下,得到递推公式如下

    dp[i] = max(dp[i], (max(j, dp[j])) * (max(i - j, dp[i - j])));

    # -*- coding:utf-8 -*-
    class Solution:
        def cutRope(self, number):
            # write code here
            if number == 2:
                return 1
            dp = [0 for i in range(number+1)]
            dp[2] = 2
            for i in range(3, number+1):
                for j in range(2, i):
                    dp[i] = max(dp[i], dp[j]*(i-j), j*(i-j))
            return dp[-1]
  • 相关阅读:
    1021 个位数统计 (15 分)
    10. HttpServletResponse接口
    9. HttpServletRequest接口
    11. jQuery 获取元素尺寸
    10. jQuery 对元素属性的操作~ 一篇就够.
    7. HttpServlet类
    6 .数据库-增删改
    6. GenericServlet类
    9. jQuery 的节点操作
    8.jQuery 的 基本绑定事件操作
  • 原文地址:https://www.cnblogs.com/liushoudong/p/13538837.html
Copyright © 2011-2022 走看看