b站 分解的最小和 有啥更好的方法么
package main
import (
"fmt"
)
func isSushu(N int) bool {
for i := 2; i < N/2; i++ {
if N%i == 0 {
return false
}
}
return true
}
func findPQ(N int, dp []int) int {
min := 9999999999
for i := 2; i <= N; i++ {
for j := i; j <= N; j++ {
if i*j == N {
if dp[i]+dp[j] < min {
min = dp[i] + dp[j]
}
break
} else if i*j > N {
break
}
}
}
return min
}
func fillDP(N int, dp []int) {
for i := 1; i <= N; i++ {
if isSushu(i) {
dp[i] = i
} else {
res := findPQ(i, dp)
dp[i] = res
}
}
}
func main() {
var N int
fmt.Scanln(&N)
dp := make([]int, N+1)
fillDP(N, dp)
fmt.Println(dp[N])
}
A是A了但有啥更优的方法么..#bilibili笔试#
查看25道真题和解析
