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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

动态规划 —— 状压 DP

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

【概述】

通常將以一個集合內的元素信息作為狀態且狀態總數為指數級別的動態規劃稱為狀態壓縮動態規劃。

其是一類以集合信息為狀態的特殊的動態規劃問題,主要有傳統集合動態規劃與基于連通性狀態壓縮的動態規劃兩種。

其原理是通過二進制位運算將狀態壓縮(用整數表示集合)作為動態規劃的狀態來解決問題。

通常具備以下兩個特點:

  • 數據規模的某一維或幾維特別小
  • 需要具備動態規劃問題的兩個基本性質:最優性原理、無后效性原則
  • 為更好的理解狀壓 DP,首先要有相關的位運算知識,關于位運算:點擊這里。

    【使用條件】

    在任意時刻,已經求出最優解的狀態與尚未求出最優解的狀態在各維度上的分界點組成了 DP 擴展的輪廓,對于某些問題,需要在動態規劃的狀態中記錄一個集合,保存這個輪廓的詳細信息,以便進行狀態轉移。

    若集合大小不超過 n,集合中每個元素都是小于 k 的自然數,則可以把這個集合看作一個 n 位 k 進制數,以一個??之間的十進制整數的形式作為 DP 狀態的一維。

    【使用技巧】

    1.狀壓 DP 題型

    1)數據 n≤16 ,但狀態總數可達指數級

    2)滿足無后效性原則,通過前面的狀態知道后面的怎么選,用 1、0 來記錄狀態是否存在

    2.一般定義二維數組

    第一維是第幾排(如:鋪磚塊等)

    第二維標識狀態,0 或 1

    3.數組初始化

    根據題設設置初值,一般為 memset(dp,127,sizeof(dp));

    再進行狀態更新:

    for(int i=0;i<n;i++) ? dp[i][1<<i]=0;?

    表示 i 在 state 中存在,這里的 1<<i 就是一種只選 i 的 state

    4.枚舉狀態循環求值

    for(int i=1;i<=n;i++) {for(int j=0;j<(1<<m);j++){if(check(i,j))//判斷當前行滿足條件的state{for(int k=0;k<(1<<m);k++)//枚舉上一行的pre_state進行更新{...}}} }

    5.判斷狀態中的每一個是否符合要求

    for(int i=sum;i!=0;i=(i-1)&sum) {... }

    【例題】

    1.入門題

  • Corn Fields(POJ-3254):點擊這里
  • 最小總代價(洛谷-U17433):點擊這里
  • Necklace(HDU-3091):點擊這里
  • Most Powerful(ZOJ-3471):點擊這里
  • 2.TSP 問題

  • Hie with the Pie(POJ-3311)(狀壓+Floyd求最短路):點擊這里
  • Traveling(HDU-3011)(三進制的壓縮):點擊這里
  • Tourism Planning(HDU-4096)(注意滿意度的計算):點擊這里
  • 3.其他

  • 炮兵陣地(POJ-1185)(三層狀態的判斷):點擊這里
  • Pieces(HDU-4628)(回文字串的判斷):點擊這里
  • Mondriaan's Dream(POJ-2411)(貼磚塊問題):點擊這里
  • Doing Homework(HDU-1074)(狀壓+遞歸輸出):點擊這里
  • 方格取數(1)(HDU-1565)(需進行預處理,計算合法數據個數):點擊這里
  • Riddle(2018 CCPC (秦皇島站) I 題)(互斥的狀態):點擊這里
  • 總結

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

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