Fliptile POJ 3279(狀態壓縮)

2022-05-08 05:45:10 字數 979 閱讀 1857

題意:給你乙個n * m的矩陣,元素為0/1, 求把所有的元素變成0所需要的最少操作。(每對乙個格仔操作,該十字格的元素反轉)

分析:一看資料量 <= 15, 就有點狀態壓縮的感jio。從小到大列舉第一行的操作,因為第一行的操作決定了後面所有的操作,所以最後判斷對於第一行的操作是不是符合題意即可。

**:

1 #include 2 #include 3 #include 4 #include 5

using

namespace

std;

6const

int maxn = 20;7

intnow;

8int

g[maxn][maxn];

9int

cnt[maxn][maxn];

10int res[(1

<< 15) + 10

][maxn][maxn];

1112

intmain()

1334 tmp >>= 1;35

}36for(int i = 2; i <= n; i++)

37for (int j = 1; j <= m; j++)

3847}48

int flag = 0;49

for(int i = 1; i <= m; i++)

50if ((g[n][i] + cnt[n][i]) & 1)51

55if (!flag)

56 res[now][0][0] = ope, minn =min(minn, ope);

57else res[now][0][0] = -1;58

}59for(int i = 0; i < (1

<< 15); i++)

60if (res[i][0][0] ==minn)

6167 printf("

impossible");

68 }

POJ 3279 搜尋(反轉)

這道題搜尋的角度很有意思。比較直白的想就是每個瓷磚都可以反或不反,2種選擇。這樣的話,搜尋的狀態數時間太多,指數級增長,肯定t。不妨這麼想。如果指定了第1橫排的翻法。那麼如果第1橫排存在黑色,也就是 1,x 為黑。那麼 2,x 就必須反轉才能保證 1,x 為白,那麼第2排的反轉法也確定了。如此類推,...

POJ3279 開關後續

描述 乙個n m 的矩陣,每個格仔 有0和1 兩種狀態 每次可 以翻乙個 格仔,並 且此格仔 的上下左 右都要被 翻。n m的矩陣,每個格仔有0和1兩種狀態.每次可以翻乙個格仔,並且此格仔的上下左右都要被翻。n m的矩陣 每個格 子有0和 1兩種狀 態.每次 可以翻一 個格仔,並且此格 子的上下 左...

poj3279 (搜尋,好題 )

前題 這題是之前 做鄺斌搜尋專題遺留下的三題之一,最近為了複習搜尋姿勢補上。題意 最大15 15平面 二維陣列 有1有0,對乙個地方操作,與他相鄰四個包括他自己會翻轉 0變1,1變0 求出最少的操作讓全部變成0,輸出操作位置圖。思路 很明顯每個點操作一次就夠了,兩次恢復原樣,然後 我就想不到了.15...