题目
思路:DP
定义dp[n]
表示长度为n的绳子最大乘积。
一段长度为n的绳子,切第一刀共有n-1种情况,即第一刀绳子的长度为1, 2, 3....n-1。然后再在这些绳子中继续切寻找最大值,切出来的两段绳子可以看做是两条新的绳子dp[i]
,dp[n-i]
,我们有这两条绳子的最大乘积,也就有了长度为n的绳子的知道乘积。
所以dp[n] = max(dp[i] * dp[n-i])
。
dp[0], dp[1], dp[2], dp[3]为特殊情况,特判即可。
代码语言:javascript复制func cuttingRope(n int) int {
if n == 2 {
return 1
}
if n == 3 {
return 2
}
dp := make([]int, 59)
dp[0] = 0
dp[1] = 1
dp[2] = 2
dp[3] = 3
for i := 4; i <= n; i {
m := 0
for j := 1; j <= i/ 2; j {
if dp[j]*dp[i-j] > m {
m = dp[j] * dp[i-j]
}
}
dp[i] = m
}
return dp[n]
}
我的博客即将同步至腾讯云 社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=25rtvweals4k8