UVa 11464 EvenParity 偶數矩陣

2021-07-03 12:36:33 字數 978 閱讀 7466

題意:給定乙個n*n的01矩陣(每個元素非0即1),要求把盡量少的0變成1,使得每個元素的上下左右的元素(如果存在)之和均為偶數。

暴力水題。當然也不能太暴力啦。很容易的一種想法是列舉每個0的位置是否需要變化,這樣的複雜度將是o(2^(n^2))的複雜度是會tle的。但是我們可以只列舉第一排的0。因為第一排的元素只受第一排和第二排元素的影響。所以第一排元素如果確定下來了,第二排的元素實際上是可以唯一確定的。而第二排的元素又只受第一排、第二排、第三排元素的影響,因此確定了第一排和第二排的元素後,第三排的元素也是確定的。以此類推,如果前n排元素確定了,那麼第n + 1排元素就可以確定。所以我們可以只需要列舉第一排哪些0需要變為1,然後依次計算完每一排元素,最後判斷一下最後一排元素是符合要求就可以了。用二進位制方式對映10進製數枚舉即可。在處理上,可以假設第一排的元素都是0,如果列舉到某種情況發現第一排某個元素為0而原來的矩陣上對應位置為1,直接判不符合條件即可。

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

const int max = 20;

const int inf = 1000;

int n;

int a[max][max];

int temp[max][max];

int get(int i, int j) //判斷當前元素的取值

int cal(int x)

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

}for(int i = 0; i < n; i++) //檢驗最後一排元素是否符合要求

return res;

}void input()

}void solve()

int main()

return 0;

}

uva 11464 暴力列舉矩陣

這個題也是乙個列舉子集暴力,訓練賽的時候沒有做出來,這個對於矩陣的表示,偶數矩陣就是乙個位置的上下左右加起來都是偶數,才能算是偶數矩陣,直接暴力列舉第一行,然後確定下面的位置,然後如果有衝突那就不對,如果沒有衝突,然後比對,與之前的矩陣的變換,就可以獲得改變次數,然後每次取最小。include in...

UVa11464偶數矩陣 部分列舉 遞推

題意 有乙個n n的01矩陣,任務是把盡可能少的0變成1,使得每個元素的上 下 左 右元素之和為偶數。n 15 0 0 0 0 1 0 1 0 0 1 0 1 需要3次變化 0 0 0 0 1 0 思路 最容易想到列舉所有數字變或不變,2 15 15 2 255 就是5 10 67左右。注意到n小於...

uva11464 偶矩陣,推理題

明天省賽,所以今天做幾道所謂水題,可惜這個題因為輸出寫錯wa了很久,如果直接列舉矩陣所有的位置是否改變,那麼時間複雜度是承受不住的 這道題讓我學到的,就是 1 遇到題先手算模擬,然後嘗試找規律吧。這道題的規律就是 第一行一旦確定,那麼整個矩陣就可以確定,所以列舉第一行,還可以的 2 if else ...