poj3254 Corn Filed 狀態壓縮dp

2021-08-15 19:34:51 字數 648 閱讀 9369

題目描述:

乙個農民有一塊m行n列大的地 有一些塊能種地、有一些塊不能,要求種的地之間不相鄰,問一共有多少種種地方法?

輸入:2 3

1 1 1

0 1 0

輸出: 9

思路:對每一行的某乙個位置是否種地進行狀態列舉,每行有n塊地,則其狀態j範圍為0~(1<#include #include #include using namespace std;

int a[13][13];

int dp[13][1<<13];

int bit[13];

bool ismatch(int k,int j) //相鄰的兩行是否可以匹配

int main() }

memset(dp,-1,sizeof(dp)); //將所有dp值賦為-1

for(int i=0;i0&&ismatch(k,j)) //判斷目前該行的狀態與上一行可行的狀態是否匹配}}

} }int res=0;

for(int i=0;i0)

res+=dp[n-1][i];

} cout《注意if表示式內括號的缺失(符號優先順序問題)造成錯誤

然而,該**沒有通過poj,先放在這兒,有待完善,也希望網友能夠對**不恰當之處進行指正,不勝感激!

poj解題報告 3254

狀態壓縮dp。題意 給出乙個n行m列的草地,1表示肥沃,0表示貧瘠,現在要把一些牛放在肥沃的草地上,但是要求所有牛不能相鄰,問有多少種放法。分析 假如知道第 i 1 行的所有的可以放的情況,那麼對於第 i 行的可以放的一種情況,只要判斷它和 i 1 行的所有情況的能不能滿足題目的所有牛不相鄰,如果有...

POJ 3254,POJ 1185(狀態壓縮DP)

poj 3254 corn fields 我們可以用二進位制列舉第一行狀態,用1代表在這種植,0代表不種植,第一行確定了,第二行就可以根據第一行不斷累加。dp row state 代表第row行用state狀態時的方法數。如果這個state合法,則dp row state dp row 1 stat...

POJ 3254 (狀態壓縮DP)

思路 狀態壓縮dp,用二進位制位的1表示放了,0表示沒有放。設dp i j 表示第i行狀態為j時,前i行的方案數,狀態轉移方程就是 dp i j dp i 1 k j與k這兩個狀態不衝突。最後答案就是dp n 1.top 之和。include include include include incl...