# 例子1:
# 剑指Offer(第二版)面试题14:剪绳子
# 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?
# 分析:
# f(1) = 0
# f(2) = 1*1 = 1 如果不剪,则为2
# f(3) = 1*2 = 2 如果不剪,则为3
# f(4) = max(1*3,1*1*2,2*2) = 4
# ...
# 可以看出,当长度为1,2,3时,这是特殊值,如果不剪则更大,当给定的值大于3时,我们把2,3作为不剪的,则可以得出
# f(n) = max(f(1)*f(n-1),f(2)*f(n-2)...f(n//2)*f(n-n//2))
# 那么,我们用一个列表来存每一个对应的值,索引对应的就是绳子长度n
def cut(n):
if n == 1:
return 0
if n == 2:
return 1
if n == 3:
return 2
# 构造一个数组
res_list = [0] * (n + 1)
# 设置数组初始的1,2,3的值
res_list[1] = 1
res_list[2] = 2
res_list[3] =
python----动态规划
最新推荐文章于 2021-01-20 20:43:03 发布