狀壓dp 玉公尺田 狀壓dp

2021-10-10 21:58:58 字數 3081 閱讀 4046

相關:

強相關:

327. 玉公尺田

[狀壓dp] 小國王(狀壓dp)是井字形,本題是十字形。

思路:

狀態計算:時間複雜度:n∗2

n∗2n

=o(n

22n)

=12∗2

24n*2^n*2^n=o(n2^)=12*2^

n∗2n∗2

n=o(

n22n

)=12

∗224

看著妥妥超時,但是裡面合法狀態很少…依舊可以過

在此,head陣列儲存對應關係,其實不必要存state陣列的值。也可以存state陣列中兩個合法狀態各自的下標。因為這也是一一對映的關係,且dp陣列在列舉最後一維狀態的時候,也可以存下標。這樣**能簡潔很多…

**:

#include

#include

#include

#include

using

namespace std;

const

int n =

14, m =

1<<

12, mod =

1e8;

int n, m;

int g[n]

;// 將地圖每一行抽象為二進位制表示

vector<

int> state;

vector<

int> head[m]

;int f[n]

[m];

bool

check

(int x)

intmain()

for(

int i =

0; i <

1<< m;

++i)if(

check

(i))

state.

push_back

(i);

for(

int i =

0; i < state.

size()

;++i)

for(

int j =

0; j < state.

size()

;++j)

f[0]

[0]=

1;for(

int i =

1; i <= n +1;

++i)

for(

int a =

0; a < state.

size()

;++a)

for(

int b =

0; b < head[state[a]].

size()

;++b)if(

(g[i]

& state[a])==

0)f[i]

[state[a]]=

(f[i]

[state[a]

]+ f[i -1]

[head[state[a]

][b]])

% mod;

cout << f[n +1]

[0]<< endl;

return0;

}

同理[狀壓dp] 小國王(狀壓dp),也可以用下標對映狀態的思想,在dp陣列中存下標即可。**能簡潔方便點。

存下標,簡潔**:

#include

#include

#include

#include

using

namespace std;

const

int n =

14, m =

1<<

12, mod =

1e8;

int n, m;

int g[n]

;// 將地圖每一行抽象為二進位制表示

vector<

int> state;

vector<

int> head[m]

;int f[n]

[m];

bool

check

(int x)

intmain()

for(

int i =

0; i <

1<< m;

++i)if(

check

(i))

state.

push_back

(i);

for(

int i =

0; i < state.

size()

;++i)

for(

int j =

0; j < state.

size()

;++j)

f[0]

[0]=

1;for(

int i =

1; i <= n +1;

++i)

for(

int a =

0; a < state.

size()

;++a)

for(

int b : head[a])if

((g[i]

& state[a])==

0)f[i]

[a]=

(f[i]

[a]+ f[i -1]

[b])

% mod;

cout << f[n +1]

[0]<< endl;

return0;

}

狀壓DP 玉公尺田

農夫約翰的土地由m n個小方格組成,現在他要在土地裡種植玉公尺。非常遺憾,部分土地是不育的,無法種植。而且,相鄰的土地不能同時種植玉公尺,也就是說種植玉公尺的所有方格之間都不會有公共邊緣。現在給定土地的大小,請你求出共有多少種種植方法。土地上什麼都不種也算一種方法。輸入格式 第1行包含兩個整數m和n...

玉公尺田 狀壓DP 記搜

乙個n m role presentation n m n m的矩陣裡,有幾個是可以種植玉公尺的。求玉公尺種植不相連的方案數。dfs爆搜 只 能拿90分,正解是狀壓dp。可以把可種植玉公尺的土地用1表示,貧瘠的土地用0表示,每一行串成的數字就是乙個二進位制數,狀態壓縮後,就成了乙個較小的十進位制數。...

jzoj 1266 玉公尺田(狀壓dp)

description 農民 john 購買了一處肥沃的矩形牧場,分成m n 1 m 12 1 n 12 個格仔。他想在那裡的一些格仔中種植美味的玉公尺。遺憾的是,有些格仔區域的土地是貧瘠的,不能耕種。精明的 fj 知道奶牛們進食時不喜歡和別的牛相鄰,所以一旦在乙個格仔中種植玉公尺,那麼他就不會在相...