求把 n×m 的棋盤分割成若干個 1×2 的的長方形,有多少種方案。
1≤n,m≤11
用f[i][s]表示第i行狀態為s的方案數;
對於s 0表示i-1列無伸向第i列的方格,1表示有伸向第i列的方格;
先預處理可用狀態(對這一題所有狀態都可用)
state.clear();
for(int i=0;i< 1《找可轉移的狀態 即 對於狀態 a ,b 滿足(a&b)==0&&check(a|b)
bool check(int state)
res=0;
}else res++;
}if(res&1) flag=false;
return flag;
} //main()裡
for(int i=0;i狀態計算:
memset(f,0,sizeof(f ));
f[0][0]=1;
for(int i=1;i<=m;i++)
res=0;
}else res++;
}if(res&1) flag=false;
return flag;
}int main()
{ while(cin>>n>>m,n||m)
{state.clear();
for(int i=0;i< 1<
AcWing 291 蒙德里安的夢想
題意 給出 n 11,m 11 的矩陣,要求將矩陣全部恰好分成 1 times 2 或者 2 times 1 的小矩陣,問方案數。題解 主要是dp陣列的含義定義要了解,設 dp 表示的是第 i 行 j 形狀的方案數,這裡的 j 代表的是二進位制的狀態。想象乙個 01 串,然後在串中第 x 個0代表的...
acwing 291 蒙德里安的夢想(狀壓DP)
我們發現,只要確定了橫向小方格的位置 藍色 其餘位置都是縱向的小方格,就已經確定了一種方案,所以我們只需要列舉合法的橫向小方格,那麼就相當於列舉了方案數。先給出 f i j 的定義 第 i 列的 j 狀態下的方案總數。j用二進位制表示,如圖,第二列現在的狀態 藍色 就是 100 1表示此列有方格,0...
291 蒙德里安的夢想
求把 n m 的棋盤分割成若干個 1 2 的的長方形,有多少種方案。例如當 n 2,m 4 時,共有 5 種方案。當 n 2,m 3 時,共有 3 種方案。如下圖所示 輸入包含多組測試用例。每組測試用例佔一行,包含兩個整數 n 和 m 當輸入用例 n 0,m 0 時,表示輸入終止,且該用例無需處理。...