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笔试#