POJ 1830 高斯消元

2021-08-18 10:03:56 字數 1023 閱讀 9817

中文題意,我就不多說什麼了,學習高斯消元時看到的這道題,其實一開始我還沒看懂這題跟高斯消元有什麼關係,emmm都怪我線代學的太差了.

這道題中,我們不妨設a[i][j] = 1表示第j燈可以影響到第i燈,若為0則表示無影響,顯然a[i][i] = 1

又設x[i]代表第i個開關的操作狀態(1位操作,0為不操作), s[i]為開始狀態,e[i]為結束狀態,則可列出n個方程:

( x[1] * a[i][1]  +  x[2] * a[i][2]  + ... +  x[n] * a[i][n]  ) % 2  =  (e[i] - s[i]);

看,是不是像線性方程組了呢?於是我們利用高斯消元,可以得到r個解,剩下的n-r個就是自由元,對於這些

自由元,我們可以隨便的取1 or 0, 所以就有2^(n-r)種操作。

特殊的,如果某一行的係數全為0,而增廣矩陣最後一列對應的行的值不為0,則表示無解。

ac**如下:

#include#include#include#include#includeusing namespace std;

int a[30][30], n, b[30];

int guss()

if(k != i)

if(!a[i][j])

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

} } for(l = i; l < n; l++)

if(i == n) return 1;

else return pow(2, n-i);

}int main()

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

int p, q;

while(~scanf("%d %d", &p, &q))

int r = guss();

if(r == -1) cout << "oh,it's impossible~!!" << endl;

else cout << r << endl;

} return 0;

}

poj 1830 高斯消元

include include include include include include include include include includeusing namespace std typedef vectorvi typedef vectorvvi typedef vectorvv...

數學 高斯消元 POJ 1830

mean 略analyse 增廣矩陣 con i j 若操作j,i的狀態改變則con i j 1,否則con i j 0。最後的增廣矩陣應該是n n 1 最後一列 對比開光的始末狀態,若相同則為0,若不同則為1 最後的解共有三種 1.無解,既出現了一行中前面n個數為0,第n 1的值非0 2.沒有第1...

POJ 1830 開關問題 高斯消元

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