D Fliptile 二進位制列舉 反轉

2021-08-20 10:39:39 字數 793 閱讀 7783

題目大意:讓牛踩瓦片使得瓦片反轉,但是因為牛蹄太大,在踩到要反轉的瓦片的同時,也使相鄰的上下左右四個瓦片反轉。現在問,牛如何踩瓦片,才能使得踩的次數盡量少的前提下使瓦片全部反轉過來。

思路:仔細想你會發現瓦片反轉是有規律的,當第一行如何反轉確定下來時,第二行會根據第一行的反轉情況確定下來,比如第一行進行反轉處理後 最終狀態是1001,那麼就要通過反轉第二行的瓦片,使得第一行變為0000的狀態,則第二行反轉第乙個和第四個。接著一次進行第三行、第四行、一直到n-1行。這裡,為什麼是n-1行呢,由於我們每次的反轉(除第一行外)都是根據上一行的狀態進行的,當反轉完第n-1行時,第n行瓦片的狀態就已經確定了。因此我們可以通過暴力列舉第一行瓦片的反轉,通過判斷最後一行是否符合要求,來判斷第一行的這個列舉情況是否可行。 這裡,列舉用到二進位制列舉。

不懂二進位制列舉的:傳送門

下面上**:

#include#include#include using namespace std;

int t[30][30], tem[30][30], m[30][30];//t表示瓦片狀態,tem表示是否對該瓦片進行反轉

int m,n,dir[5][2] = ;

int get(int x, int y)//判斷該瓦片狀態,從而判斷是否需要對它下面的這個瓦片進行反轉

return c % 2;

}int cal()//遍歷計算反轉瓦片的次數

int main()

}if (min == -1)printf("impossible\n");

else

}

二進位制列舉

fliptile 乙個反轉問題,大意是一頭牛要反轉木板,木板有黑和白,全部翻成白色的反法 輸出。小蒟蒻根本想不到 參考了大佬的部落格。點此轉入 把第一行的全部翻法都試一遍,然後看哪種的步數最少。好難想。include include int maze 20 20 int t 20 20 int f ...

二進位制列舉

一 二進位制操作 算數字運算 a 60 0011 1100 b 13 0000 1101 1.與 兩個二進位制數,同 1為 1,否則為 0。a b 12 0000 1100 2.或 兩個二進位制數,同 0為 0,否則為 1。a b 61 0011 1101 3.非 按位取反 對二進位制每一位進行了一...

二進位制列舉

讓我們從乙個題目入手 從乙個大小為n的整數集中選取一些元素,使得它們的和等於給定的值t。每個元素限選一次,不能乙個都不選。關於這個題目,我們很容易想到的便是對所有元素進行暴力搜尋,然後進行剪枝便可。下面我將介紹二進位制列舉的思路和流程來巧妙的解決這個問題。對任一數來說,所面臨的問題是取或不取,在二進...