动态规划
题目:
‘’’
给你一根长度为的绳子,请把绳子剪成段(m、都是整数 m>1并且m>1),每段绳子的长度记为AO이A]…A서m』请问AO)xy×- m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长 度分别为2、3、3的三段,此时得到的最大乘积是18
‘’’
分析:假设n长度的时候,得到的最优解为f(n),则f(n)= max(f(i)f(n-i))这样是递归的思路
可以“从下自上”的方式去计算,储存最优解在数组中,避免递归
def maxmuti(n):
# 计算几个初始结果
if n<2:
return 0
if n==2:
return 1
if n==3:
return 2
# 重新赋值为后续计算作准备
dp = [0 for x in range(n+1)]
dp[0]=0
dp[1]=1
dp[2]=2
dp[3]=3
for i in range(4,n+1):
fiMax = 0
for j in range(1,i//2+1):
multi = dp[j]*dp[i-j]
if multi>fiMax:
fiMax = multi
dp[i]=fiMax
print(dp[n])
maxmuti(8)