oj
題意已經非常清楚了,這題其實跟[poj 2411]這道題類似,算是乙個加強版,都是放置多公尺諾骨牌,不過這個題新增了障礙物,也就是多加了判斷而已,不過也在放置邏輯上加大了難度。
核心思想依然是:列舉上一行的狀態,搜尋這一行所有可能的填寫情況。
我們定義如下這種填充表示方式:如果乙個骨牌是橫著放的,那麼它所在的兩個方格都填充1.如果它是豎著放的,那麼它所在的兩個格仔中,上面的那個填0,下面的這個填1.如下圖所示:
**實現
int
dp;boolean
no;// 根據之前一行的狀態來搜尋當前行的最大放置方式
void
dfs(
int presta,
int cursta,
int row,
int col,
int m,
int now)
else
return;}
// 如果當前位置有障礙物
if(no[row]
[col]
)else
// 豎著放置,能放置的前提是前一行留有空位
if(row !=0&&
((presta >> col)&1
)!=1)
else}}
public
intdomino
(int n,
int m,
int[
] broken)
for(
int i =
0; i < n;
++i)
dp[0]
[(1<< m)-1
]=0;
for(
int i =
0; i < n;
++i)
}int ans = integer.min_value;
for(
int i =
0; i
<< m)
;++i)
return ans;
}
狀壓dp之棋盤覆蓋
1.poj2411 題目大意 用2 1的骨牌覆蓋滿乙個n m的矩陣,求方案數。n,m 11 題目分析 由於n和m都很小,可以想到狀態壓縮dp。如果我們f i j 表示某i行的狀態j,在狀態j中,1表示已經覆蓋,0表示沒有覆蓋,那麼有三種情況 1.不放 2.橫著放 3.豎著放。用dfs來尋找每行和它上...
狀壓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 看著妥妥超時,但是裡面合法狀態很少 依舊可以過 在此,...
luogu 1990 覆蓋牆壁 狀壓dp
題目描述 description 你有乙個長為n寬為2的牆壁,給你兩種磚頭 乙個長2寬1,另乙個是l型覆蓋3個單元的磚頭。如下圖 0 0 0 00 磚頭可以旋轉,兩種磚頭可以無限制提供。你的任務是計算用這兩種來覆蓋n 2的牆壁的覆蓋方法。例如乙個2 3的牆可以有5種覆蓋方法,如下 012 002 0...