BZOJ2064狀態壓縮動態規劃

2021-07-22 16:10:15 字數 746 閱讀 1086

n1和n2都小於等於10,考慮狀態壓縮動態規劃

預處理:

d[ i ][ j ]表示開始狀態的子集i,變成結束狀態的子集j所需要的步數。(這裡需要i的面積和與j的面積和相等,所需要的步數是暴力合併i和暴力拆分j的步數)

dp:f[ i ][ j ]表示當前剩餘狀態開始狀態的i,和結束狀態的j。

列舉i的子集p , j ^ (1 << (n2-1))的子集q // q是全集j的補集的子集

主動遞推:

f[ i ^ p ][ j | q ] = min;

注意:1、動態規劃的無後效性,即i從大到小列舉,j從小到大列舉。

2、注意列舉子集的方法

3、要判斷i + j的面積是否為全集的面積,否則會tle

#include #include #include #define n 2049

using namespace std;

int x[n],y[n],n1,n2;

int d[n][n],f[n][n],s,t;

int lowbit(int x)

int c(int x)

return t;

}int sumx(int i)

return tmp;

}int sumy(int i)

return tmp;

}void pre() {

for (int i=1;i<=(1<=0;i--)

for (int j=0;j<=(1<

CODEVS 2800 送外賣 狀態壓縮 動態規劃

題目描述 description 有乙個送外賣的,他手上有n份訂單,他要把n份東西,分別送達n個不同的客戶的手上。n個不同的客戶分別在1 n個編號的城市中。送外賣的從0號城市出發,然後n個城市都要走一次 乙個城市可以走多次 最後還要回到0點 他的單位 請問最短時間是多少。現在已知任意兩個城市的直接通...

狀態壓縮動態規劃

動態規劃的狀態有時候比較難,不容易表示出來,需要用一些編碼技術,把狀態壓縮的用簡單的方式表示出來。典型方式 當需要表示乙個集合有哪些元素時,往往利用2進製用乙個整數表示。一般有個資料 n 16 或者 n 32 這個很可能就是狀態dp的標誌,因為我們要用乙個int的二進位制來表示這些狀態。要注意好這些...

動態規劃 狀態壓縮

這個題目的題意很容易理解,在乙個n m的格仔裡,我們現在有兩種型別的磚塊,1 2和 2 1,問一共有多少種方案,可以將整個n m的空間都填滿。最簡單的例子就是下面的了 程式設計之美中題目 某年夏天,位於希格瑪大廈四層的微軟亞洲研究院對辦公樓的天井進行了一次大規模的裝修.原來的地板鋪有 n m 塊正方...