2020 02 13日常總結兼狀壓dp略講(下)

2021-10-02 19:23:11 字數 2105 閱讀 4069

【題意

】:

\color

【題意】

《集合論與圖論》這門課程有一道作業題,要求同學們求出

\的所有滿足以 下條件的子集:若 x

xx 在該子集中,則 2x2x

2x和 3x3x

3x不能在該子集中。

同學們不喜歡這種具有列舉性質的題目,於是把它變成了以下問題:對於任意乙個正整數 1≤n

≤1×1

05

1 \leq n \leq 1\times 10^5

1≤n≤1×

105,如何求出

\的滿足上述約束條件的子集的個數(只需輸出對 1

,000

,000

,001(1

×109

+1

)1,000,000,001(1 \times 10^9+1)

1,000,

000,

001(

1×10

9+1)

取模的結果),現在這個問題就 交給你了。

【 思路

】:

\color

【思路】

: 一道構造+狀壓dp的好題目。

我們可以構造這麼乙個矩陣,第1

11行第1

11個數是1

11,其後,每行的第j

jj個元素是該行第j−1

j-1j−

1個數的3

33倍,每列的第i

ii個數是該列的第i−1

i-1i−

1個數的2

22倍。比如這樣:

139

2781...

261854

162...

41236108

324.

..

然後,問題就變成了在這個矩陣中選數,且相鄰的數不能同時選的方案數。

考慮到其行數和列數不是很大,所以我們可以用狀壓dp輕鬆解決。

記第i

ii行的數取或不取的狀態用0,1

0,10,

1表示,fi,

jf_

fi,j

​表示第i

ii行狀態為j

jj時的答案。轉移具體看**。

注意因為從1

11開始構造矩陣不能把所有的數包含在內,需要把所有可能的矩陣構造出來,然後根據乘法原理,答案相乘即可。

【 程式碼

】:

\color

【程式碼】

const ll mod=

1000000001

;const

int n=

100100

,m=20

;ll line[m]

,f[2][

1<<18]

,n;bool chose[n]

,g[(

1<<18)

+5];

int a[m]

[m],lim[m]

;ll ans=

1ll,t;

inline

void

initialization()

//預處理g陣列(g[i]:i是否為可行集合)

inline

void

make_rectangle

(int x)

lim[i]=(

1<1;}}

//以x為首個數字構造我們需要的矩陣

inline ll dp()

register ll res=

0ll;

for(i=

0;i<=lim[t]

;i++)if

(g[i]

) res=

(res+f[t&1]

[i])

%mod;

return res;

}//狀壓dp求解子問題

intmain()

printf

("%lld"

,ans)

;return0;

}

2020 02 12日常總結兼狀壓dp略講(上)

狀壓dp是一種很重要的dp text dp,其基本思路是利用二進位制,簡化我們狀態的定義。為了更好的理解狀壓,我們需要先來看看c 中的二進位制運算 今天,我們就講到這裡,明天我們再講。題目 鏈結 題目鏈結 題目鏈結 思路 color 思路 記f i j,k f i,j,k f i,j,k 表示第i ...

2019 08 18 日常總結

一本通1599 題意 在一年前贏得了小鎮的最佳草坪比賽後,fj 變得很懶,再也沒有修剪過草坪。現在,新一輪的最佳草坪比賽又開始了,fj 希望能夠再次奪冠。然而,fj 的草坪非常髒亂,因此,fj 只能夠讓他的奶牛來完成這項工作。fj 有 nn 只排成一排的奶牛,編號為 11 到 nn。每只奶牛的效率是...

5059日常總結

1.乙個函式的形參是const char 實參是可以是char 如果乙個函式的返回值是const char 不能用char 來接收返回值 2.為什麼沒有靜態的建構函式和析構函式?建構函式成員函式使用現有分配構造指定的物件 即存在this。static成員函式指定物件沒有儲存,因此沒有關聯的例項要構造...