Study Plan For Algorithms - Part11

1. 剪绳子
给定一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?
方法一:

def cuttingRope(n):
    arr = [1] * (n + 1)
    for i in range(3, n + 1):
        for j in range(1, i):
            arr[i] = max(arr[i], j * (i - j), j * arr[i - j])
    return arr[n]

方法二:

import math

def cuttingRope(n):
    if n < 4:
        return n - 1
    else:
        a = n // 3
        b = n % 3
        if b == 0:
            return int(math.pow(3, a))
        elif b == 1:
            return int(math.pow(3, a - 1) * 4)
        elif b == 2:
            return int(math.pow(3, a) * 2)

你可能感兴趣的:(Study,Plan,For,Algorithms,python,算法,数据结构)