算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
生活随笔
收集整理的這篇文章主要介紹了
算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
只能合并相鄰兩堆。求體力最小值
數據比較弱,最多300堆,每堆重量不超過1000。
狀態表示
f[i][j]表示合并區間[i,j]需要的最小體力
狀態轉移
把區間[i,j]分成[i,k] 和[k+1,j]兩部分,由于合并這兩部分是獨立的,一定是兩堆體力都是最小值,現在我們回看 f[i,j]的定義,對于區間[i,k] 和[k+1,j],合并的體力消耗就是f[i][k] 和 f[k+1][j]嘛
最后把[i,k] 和[k+1,j]這兩個區間的最終結果合并即可,這個結果是[i,j]中所有數據求和,可以用前綴和來優化 sum[j]-sum[i-1]
狀態轉移方程為
f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]?sum[i?1])f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]-sum[i-1])f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+sum[j]?sum[i?1])
ac代碼
題目鏈接
石子合并
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的算法基础课-动态规划-区间dp-AcWing 282. 石子合并:区间dp的全部內容,希望文章能夠幫你解決所遇到的問題。