POJ 3279Fliptile 狀態列舉 搜尋

2021-07-28 08:30:24 字數 979 閱讀 4802

題目傳送門:

題意:

給定長寬的黑白棋棋盤擺滿棋子,每次操作可以反轉乙個位置和其上下左右共五個位置的棋子的顏色,求要使用最少

翻轉次數將所有棋子反轉

為黑色的所需翻轉的是哪些棋子與次數。

分析:首先根據題目,每次操作都會影響到周圍的「棋子」,而要使得每個1都被反轉為0,那麼我們就應當每次都反轉1下方

的棋子以改變1為0.

那麼,當我們

處理過1到n-1行的時候,前n-1行就都已經是0了,最後我們只需要檢查最後一行是

不是全部為0就可以檢查這次的出操作是否正確了。

如果正確且最小,

那就存起來。最後輸出,萬事大吉。

當然,因

為我們要改變第x行的1為0需要反轉的是x+1行的位置。而這個整個規則是我們驗證一組操作是否能達到目的所

用的,

那麼我們需要在驗證前先確定操作(沒操作怎麼驗證..)。

於是根據規則內容可知,只需要能確認第一行的翻轉情況,

就能夠推出下面所有的翻轉情

況並驗證是否正確。於是需要做的就是列舉第一行的情況了。

#include#include#include#includeusing namespace std;

const int maxn = 20;

int mp[maxn][maxn], flip[maxn][maxn], best[maxn][maxn];

int dir[5][2] = ;

int n, m;

int get(int x, int y)//判斷當前情況下是否需要翻轉該點下面的位置

}return now&1;

}int work()

int main()

}if(ans == 0x3f3f3f3f)

cout << "impossible\n";

else

}return 0;

}

poj 3279 Fliptile 列舉 模擬

簡要題意 踩乙個點翻轉周圍五個點,求全翻成白色的方案中殘磚次數最少而且字典序最小的。我們可以首先確定第一行的翻轉情況,這個用二進位制列舉。然後之後每一行的翻轉情況就已經可以確定了,然後模擬出來就可以了。算是比較經典的題,好像看到過不少類似的題。include include include incl...

POJ3279 Fliptile 開關問題

記錄乙個菜逼的成長。挑戰程式設計書上的 pragma comment linker,stack 1024000000,1024000000 include include include include include include include include include include ...

反轉問題 POJ 3279 Fliptile

problem description 農夫約翰直到聰明的牛產奶多。於是為了提高牛的至上他準備了如下遊戲。有乙個n m的格仔,每個格仔可以翻轉正反面,它們一面是黑色,另一面是白色。黑色的格仔翻轉後就是白色,白色的格仔翻轉過來則是黒色。遊戲要做的就是把所有的格仔都翻轉成白色。不過因為牛蹄很大,所以每次...