狀壓DP 玉公尺田

2021-10-02 01:52:13 字數 1771 閱讀 7961

農夫約翰的土地由m*n個小方格組成,現在他要在土地裡種植玉公尺。

非常遺憾,部分土地是不育的,無法種植。

而且,相鄰的土地不能同時種植玉公尺,也就是說種植玉公尺的所有方格之間都不會有公共邊緣。

現在給定土地的大小,請你求出共有多少種種植方法。

土地上什麼都不種也算一種方法。

輸入格式

第1行包含兩個整數m和n。

第2…m+1行:每行包含n個整數0或1,用來描述整個土地的狀況,1表示該塊土地肥沃,0表示該塊土地不育。

輸出格式

輸出總種植方法對100000000取模後的值。

資料範圍

1≤m,n≤12

輸入樣例:

2 31 1 1

0 1 0

輸出樣例:

9這道題和上一題有點相似,不同點在於我們並不是每個地都是可以放東西的。所以我們需要進行判斷,這裡的用法很巧,如果我們這個地不能用我們先將他取反然後左移j位,左後判斷的時候和我們當前的a狀態與一下如果不為0說明他在不能種的地上種植了則continue。

#include

using

namespace std;

const

int n=

14,m=

1<<

12,mod=

1e8;

vector<

int> head[m]

;vector<

int> states;

int g[n]

,f[n]

[m];

int n,m;

bool

check

(int x)

intmain()

}for

(int i=

0;i<

1<(check

(i)) states.

push_back

(i);

for(

int i=

0;isize()

;i++)}

f[0]

[0]=

1;for(

int i=

1;i<=n+

1;i++)}

} cout<[0

]

}

#include

using

namespace std;

const

int n=

14,m=

1<<

12,mod=

1e8;

vector<

int> head[m]

;vector<

int> states;

int g[n]

,f[n]

[m];

int n,m;

bool

check

(int x)

intmain()

}for

(int i=

0;i<

1<(check

(i)) states.

push_back

(i);

for(

int i=

0;isize()

;i++)}

f[0]

[0]=

1;for(

int i=

1;i<=n+

1;i++)}

} cout<1][0

]

}

狀壓dp 玉公尺田 狀壓dp

相關 強相關 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 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...

玉公尺田 狀壓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 知道奶牛們進食時不喜歡和別的牛相鄰,所以一旦在乙個格仔中種植玉公尺,那麼他就不會在相...