描述:
乙個n ∗m
的矩陣,
每個格仔
有0和1
兩種狀態
.每次可
以翻乙個
格仔,並
且此格仔
的上下左
右都要被
翻。
n*m的矩陣,每個格仔有0和1兩種狀態.每次可以翻乙個格仔,並且此格仔的上下左右都要被翻。
n∗m的矩陣
,每個格
子有0和
1兩種狀
態.每次
可以翻一
個格仔,
並且此格
子的上下
左右都要
被翻。目標狀
態應該全
為0,求
最少翻的
次數,輸
出最小字
典序的方
案目標狀態應該全為0,求最少翻的次數,輸出最小字典序的方案
目標狀態應該
全為0,
求最少翻
的次數,
輸出最小
字典序的
方案這兒可就麻煩了啊,開關從一維變到了二維,不能通過確定左上角的狀態往後遞推
但是,我們可以列舉第一行的狀態,第二行怎麼翻就確定了,因為此時上面的格仔只有下面的格仔可以改變
ⅰ.列舉和預處理
關於列舉第一行,可以用二進位制數很方便的表示出來
同樣f[i][j]表示(i,j)位置有沒有被翻過,那我們統計一下上下左右被翻的次數就可以的得知此時狀態
最後,判斷第n行是否全為0即可。
#include #include using namespace std;
const int inf=1<<29;
int n,m,ans,a[20][20],f[20][20],s[20][20];
int b[5]=,c[5]=;
bool isfilp(int x,int y)
return k%2;
}int cal()
int main()
} if(ans==inf) cout<<"impossible"
}} return 0;
}
POJ3279 經典開關問題)
解題思路 如果列舉每乙個格仔的開關,複雜度為o 2 mn 這會超時。但觀察規律可知,只要第一行的開關狀態確定,後面的狀態也都確定了。由此列舉第一行的開關狀態即可。這樣複雜度變為o mn2 n include include include define inf 0x3f3f3f3f using na...
poj3279(二維開關問題)
translation 給出一張二維的圖表,1表示該處的電燈開啟,0表示該處的電燈關閉。每次關閉一盞燈會使得其相鄰的上下左右四個位置的燈狀態反轉。給出使得燈全滅的最小次數的方案以及對應的每個位置上的操作次數。solution 二維開關問題。考慮到每次列舉左上角的燈泡,然後按照一維的開關問題求解。但是...
POJ 3279 搜尋(反轉)
這道題搜尋的角度很有意思。比較直白的想就是每個瓷磚都可以反或不反,2種選擇。這樣的話,搜尋的狀態數時間太多,指數級增長,肯定t。不妨這麼想。如果指定了第1橫排的翻法。那麼如果第1橫排存在黑色,也就是 1,x 為黑。那麼 2,x 就必須反轉才能保證 1,x 為白,那麼第2排的反轉法也確定了。如此類推,...