日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          歡迎訪問 生活随笔!

          生活随笔

          當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

          编程问答

          动态规划 —— 区间 DP

          發布時間:2025/3/17 编程问答 23 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 动态规划 —— 区间 DP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

          【概述】

          區間型動態規劃,又稱為合并類動態規劃,是線性動態規劃的擴展,它在分階段地劃分問題時,與階段中元素出現的順序和由前一階段的區間中哪些元素合并而來有很大的關系。

          【思想】

          區間 DP 實質上就是在一個區間上進行的動態規劃,不僅要滿足 DP 問題的最優子結構,還要符合在區間上操作的特點。

          其主要思想就是在小區間進行 DP 得到最優解,然后再利用小區間的最優解合并求大區間的最優解。

          往往會枚舉區間,將區間分成左右兩部分,再求出左右區間進行合并操作。這樣一來,如果要得知一個大區間的情況,由于它必定是由從多個長度不一的小區間轉移而來,那么可以通過求得多個小區間的情況,從而合并信息,得到大區間。

          即:已知區間長度為 len-1 的所有狀態,然后可以通過小于 len 的狀態轉移到區間長度為 len 的狀態,一般是在外層循環遍歷 len,內層循環遍歷起點來解決。

          for k:=1 to n-1 do ? ? //區間長度for i:=1 to n-k do ? ? //區間起點for j:=i to i+k-1 do ? ? //區間中任意點dp[i,i+k]:=max{dp[i,j] + dp[j+1,i+k] + a[i,j] + a[j+1,i+k]};

          狀態轉移方程:尋找區間 dp[i,i+k] 的一種合并方式 dp[i,j] + dp[j+1,i+k],使得其值最大或最小

          區間長度 k 必須要放到第一層循環,來保證方程中狀態 dp[i,j]、dp[j+1,i+k] 值在 dp[i,i+k] 之前就已計算出來

          其中 a[i,j]+a[j+1,i+k] 可以靈活多變,其指的是合并區間時產生的附加值

          【模板】

          區間 DP 中常見的題型,其基本都可以按照以下的套路來解決,只是不同的題設對應的狀態轉移方程不同。

          此外,石子合并問題是區間 DP 中的經典模型,具體內容見:石子合并三講

          int dp[N][N];for(int i=1;i<=n;i++)dp[i][i]=初始值for(int len=2;len<=n;len++){ //區間長度for(int i=1;i<=n;i++){ //枚舉起點int j=i+len-1; //區間終點if(j>n) //越界結束break; for(int k=i;k<j;k++) //枚舉分割點,構造狀態轉移方程dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]);} }

          【例題】

          1.簡單區間 DP

        1. Multiplication Puzzle(POJ-1651):點擊這里
        2. 傳球游戲(洛谷-P1057):點擊這里
        3. 釋放囚犯(洛谷-P1622):點擊這里
        4. Halloween Costumes(LightOJ-1422):點擊這里
        5. 2.石子合并

        6. 合并石子(信息學奧賽一本通-T1274)(直線合并求最大):點擊這里
        7. 石子合并問題--直線版(Hrbust-1818)(直線合并求最小):點擊這里
        8. 石子合并(洛谷-P1880)(環形合并):點擊這里
        9. 能量項鏈(NOIP-2006 提高組)(環形合并):點擊這里
        10. 3.其他

        11. Running(POJ-3661)(分治+區間DP):點擊這里
        12. You Are the One(HDU-4283)(前綴和+區間DP):點擊這里
        13. String painter(HDU-2476)(線性DP+區間DP):點擊這里
        14. Cheapest Palindrome(POJ-3280)(遞推+區間DP):點擊這里
        15. Brackets(POJ-2955)(匹配個數+區間DP):點擊這里
        16. Brackets Sequence(POJ-1141)(遞歸輸出+區間DP):點擊這里
        17. Palindrome subsequence(HDU-4632)(回文串子序列):點擊這里
        18. Two Rabbits(HDU-4757)(非連續最長回文子序列):點擊這里
        19. 總結

          以上是生活随笔為你收集整理的动态规划 —— 区间 DP的全部內容,希望文章能夠幫你解決所遇到的問題。

          如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。