POJ 1681 開關問題 高斯消元法

2021-09-08 10:30:28 字數 1197 閱讀 1723

題目鏈結

題目大意:一堆格仔,或白或黃。每次可以把乙個改變乙個格仔顏色,其上下左右四個格仔顏色也改變。問最後使格仔全部變黃,最少需要改變幾個格仔。

解題思路

與poj 1222類似。

一共只有15*15個格仔,設初始解向量黃為0,白為1.

對於每個開關,設其改變狀態為x5,上下左右四個開關改變狀態分別為x1,x2,x3,x4,

那麼有方程x1^x2^x3^x4^x5^初始狀態=0。

這樣就有15*15個方程。解這15*15個線性方程組,就能得到每個格仔的改變狀態。

注意這裡高斯消元的是乙個開關矩陣,而不是黃白矩陣,也就是說,如果最後的解為0,不是表示這個格仔為黃,而是這個格仔相對於初始狀態沒有改變。

那麼問題就來了,如何知道改變的最少格仔?

其實很簡單,在得到最終改變格仔的狀態後,統計一下裡面的改變的格仔數,也就是解為1的元,就是結果。

同時由於要判斷無解情況,所以不能使用poj 1222中那樣的簡略寫法。

#include "

cstdio

"#include

"iostream

"#include

"cstring

"using

namespace

std;

int ratio[230][230],dir[5][2]=,t,n;

void

reset()

}bool

gauss()

for(k=i+1;k)

}k=i;

for(i=k; i)

if(ratio[i][n*n]) return

false

;

for(i=k-1; i>=0; i--)

return

true;}

intmain()

int ans=gauss();

if(!ans) printf("

inf\n");

else

}}

13597338

neopenx

1681

accepted

364k

16ms

c++1651b

2014-11-04 13:14:49

poj 1830 開關問題(高斯消元(開關問題))

language default 開關問題 time limit 1000ms memory limit 30000k total submissions 6281 accepted 2390 description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,...

開關問題 高斯消元

description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的 開關也會相應地發生變化,即這些相聯絡的開關的狀態如果原來為開就變為關,如果為關就變為開。你的目標是經過 若干次開關操作後使得最後n個開關達到乙個特定的狀態。對於任意乙個開...

POJ 1830 開關問題 高斯消元

開關問題 time limit 1000ms memory limit 30000k total submissions 3390 accepted 1143 description 有n個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應...