題目鏈結:
題目大意:一堆格仔,或白或黃。每次可以把乙個改變乙個格仔顏色,其上下左右四個格仔顏色也改變。問最後使格仔全部變黃,最少需要改變幾個格仔。
解題思路:
與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個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應...