您好,登錄后才能下訂單哦!
本篇內容主要講解“如何使用golang求出將n堆石子合并成一堆的最小得分”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用golang求出將n堆石子合并成一堆的最小得分”吧!
代碼用golang編寫。代碼如下:
package main import ( "fmt" "math" ) func main() { arr := []int{ 1, 4, 2, 3} ret := StoneMerge(arr) fmt.Println(ret) } func sum(arr []int) []int { N := len(arr) s := make([]int, N+1) s[0] = 0 for i := 0; i < N; i++ { s[i+1] = s[i] + arr[i] } return s } func w(s []int, l int, r int) int { return s[r+1] - s[l] } func StoneMerge(arr []int) int { if len(arr) < 2 { return 0 } N := len(arr) s := sum(arr) dp := make([][]int, N) for i := 0; i < N; i++ { dp[i] = make([]int, N) } best := make([][]int, N) for i := 0; i < N; i++ { best[i] = make([]int, N) } for i := 0; i < N-1; i++ { best[i][i+1] = i dp[i][i+1] = w(s, i, i+1) } for L := N - 3; L >= 0; L-- { for R := L + 2; R < N; R++ { next := math.MaxInt64 choose := -1 for leftEnd := best[L][R-1]; leftEnd <= best[L+1][R]; leftEnd++ { cur := dp[L][leftEnd] + dp[leftEnd+1][R] if cur <= next { next = cur choose = leftEnd } } best[L][R] = choose dp[L][R] = next + w(s, L, R) } } return dp[0][N-1] }
執行結果如下:
到此,相信大家對“如何使用golang求出將n堆石子合并成一堆的最小得分”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。