[置顶] 高斯消元总结

高斯消元总结

高斯消元这个算法本身并不难,主要是建立方程组比较麻烦。我将一些高斯消元的题目进行了汇总、总结。

HDU 3359 Kind of a Blur 
题意:给定一个n*m的矩阵,对于位于[i,j]的数,是由与它曼哈顿距离小于等于k的所有数的平均数决定的。求原先的矩阵。
思路:高斯消元裸题。 代码

异或方程 高斯消元

POJ 1222    http://poj.org/problem?id=1222
题意: 有5 * 6的方格,每个方格上面有一盏灯,0表示灭着,1表示亮着。每次操作一盏灯,能够使其周围(上下左右、以及自身)的状态发生改变。问最后进行怎样的操作能够使得所有的灯都灭了。
思路:将每一个位置看成一个未知数,列出30个异或方程。
代码: http://paste.ubuntu.com/7854013/

POJ 1830   http://poj.org/problem?id=1830
题意:有N个开关,可以是打开或者关闭(0<N<29)。开关之间相关联,这种关联为单向。给你初始状态、最终状态,问有多少种方法(不考虑顺序,且每个开关最多只能开关1次)
思路:每一个开关为一个未知数,建立N个异或方程。由初始状态和异或状态决定a[i][n]。如果两者相同,那么a[i][n] = 0, 否则a[i][n] = 1; 最后如果有解,解的个数便是2^(自由元个数)。
代码: http://paste.ubuntu.com/7853984/

POJ 1681 Painter's Problem
题意:有N*N的方格,每个格子有Y和W两种颜色。每次给一个方格换色,就得把它四周的都换色。(换色的规则是Y,W互变)问最少需要换多少个方格才能使其全为黄色。
思路:和1222一样,建立一个异或方程组,然后枚举自由元。(这道题应该是数据比较弱了,不枚举自由元也过了。。)  代码

POJ 1753 Flip Game
题意:有4 * 4的方格,问最少需要多少步翻成全黑或全白。
思路:和上面的一样,不过这道题必须要枚举自由元的情况。 代码

POJ 3185 The Water Bowls
题意:有20个碗,0表示可行状态,1表示不可行状态。现在有一种操作,每次可以将一个碗以及它两边的碗(可能只有一边)的状态转化为对立状态。问最少多少次操作得到全部可行。
思路:先用高斯消元解方程组,然后枚举自由元。 代码

模方程

POJ 2947 Widget Factory
题意:有n个任务,每个任务需要3到9天的时间来完成。现在一直有m个人,每个人做k个任务,已知他一刻不停的从周X做到周Y(时间跨度可能大于一周)。现在问你能否知道每个任务各需要多少天来完成。输出多解,无解。如果有唯一解,输出每个任务的天数。
思路:将每个任务的时间都模7,就是从0~6的一个数,所以可以列出m个未知数,n个方程的模方程组。然后求出解即可。 代码

POJ 2065 SETI
题意:输入一个素数P,一串字符串str,字符串的每个字符对应一个整数a=1,b=2,c=3····,*=0(输入字符只会是26个小写字母加上*)
例如str[] = "abc", 那么说明 n=3, 字符串所对应的数列为1, 2, 3。
并且题中定义了一个函数:
a0*1^0 + a1*1^1+a2*1^2+........+an-1*1^(n-1) = f(1), f(1) = str[0] = a = 1;
a0*2^0 + a1*2^1+a2*2^2+........+an-1*2^(n-1) = f(2), f(2) = str[1] = b = 2;
..........
a0*n^0 + a1*n^1+a2*n^2+........+an-1*n^(n-1) = f(n),f(n) = str[n-1] = ````
思路:就是在模p的基础上解同余方程组 代码

你可能感兴趣的:(高斯消元)