中文題意,我就不多說什麼了,學習高斯消元時看到的這道題,其實一開始我還沒看懂這題跟高斯消元有什麼關係,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個相同的開關,每個開關都與某些開關有著聯絡,每當你開啟或者關閉某個開關的時候,其他的與此開關相關聯的開關也會相應...