//有m個開關,n個燈泡,每個開關可以控制不同的燈泡(可以有多個)
//給定n個燈泡的亮暗情況,問有多少種開關的情況
//用a[i][j]表示第j個開關對第i個燈泡能否控制,1為能,0為否
//用高斯消元,ans = 2^(var-k) ,(var-k)為自由變數數
#include
#include
#include
using namespace std ;
const int maxn = 60 ;
#define abs(a) (a > 0 ? a : -a)
typedef __int64 ll ;
int a[maxn][maxn] ;
int b[maxn][maxn] ;
int x[maxn] ;
int free_x[maxn] ;
int equ , var;
int gauss()
for(int i = k+1 ; i < equ ;i++)
}for(int i = k ;i < equ ;i++)
if(a[i][col] != 0)return -1 ;//無解
return var - k ;
}int main()
}int q ;
for(int i = 0 ;i < equ ;i++)
memcpy(b[i] , a[i] , sizeof(a[i])) ;
scanf("%d" , &q) ;
printf("case %d:\n" , ++cas) ;
while(q--)
for(int i = 0 ;i < equ;i++)
memcpy(a[i] , b[i] , sizeof(b[i])) ;
int sum = gauss() ;
if(sum < 0)
ll ans = 1;
for(int i = 1;i <= sum;i++)
ans*=2;
printf("%i64d\n" , ans) ;}}
return 0 ;
}
高斯消元求方案數 HDU3364
難點在於構建方程組 題目大意 有 n 盞燈,m 個開關,每個開關可以控制多盞燈,每盞燈可以被多盞開關控制。開 始每盞燈都是開閉狀態,給定每盞燈的最終狀態,問有多少種方案可以到達。解題思路 對於每一盞燈,可以列出乙個方程,這樣就可以列出 n 個方程,有 m 個未知量。從 而構成乙個 n m 的矩陣,對...
hdu 3915 高斯消元
這道題目是和博弈論掛鉤的高斯消元。本題涉及的博弈是nim博弈,結論是 當先手處於奇異局勢時 幾堆石子數相互異或為0 其必敗。思路在這裡,最後由於自由變元能取1 0兩種狀態,所以,最終答案是2 k,k表示自由變元的個數。include include include include include i...
HDU 5755 高斯消元
題意 給出乙個模3意義下的矩陣,每次選中乙個元素就可以使得自身 2,上下左右元素 1。求所有元素變成0的一種解。o nm 3 怎麼會不炸!怎麼會不炸!好吧就是不炸,可能在消元的時候0比較多吧 可以為什麼不用列舉自由元呢?不是很懂這個資料 直接按照上下左右自身的元素對自己的貢獻建立方程組暴力消元,遇到...