POJ 1222 EXTENDED LIGHTS OUT
基本的开关灯问题.还
保证唯一解.
我们把每一个灯泡当成一个状态xi,总共有30个,而且每个灯与其他灯的关系也很明显。所以我们就可以列30方程30个变元的方程组:
xi = 1 * xi + 1 * x(i-1) + 1 * x(i+1) + 1 * x(i-6) + 1 * x(i+6) = 1 or 0 (mod 2) (0还是1看这个灯的初始状态,即输入数据)
这明显就是裸的高斯消元了,题目还保证有唯一解。。。唯一的难点就是mod 2的处理,但是也不难,只要在行阶梯矩阵回带求解时取模就可以了~~~(具体看代码吧)
代码:
http://www.shaidaima.com/source/view/11233
POJ 1681 Painter's Problem
开关灯模型,
求解中1最少的方案(求最优解)。此时我们往往需要
枚举自由变元的状态来求出多解,但此题数据较弱,不需枚举,每次将自由变元置为0可过.
代码:
http://www.shaidaima.com/source/view/11234
POJ 1830 开关问题
开关灯问题,
求解的个数。更简单,唯一解输出1,
多解时解的个数就是(2^自由变元个数).
不过这题我把它换用异或方程组做,即:
M[0][0]x[0]^M[0][1]x[1]^…^M[0][N-1]x[N-1]=B[0]
M[1][0]x[0]^M[1][1]x[1]^…^M[1][N-1]x[N-1]=B[1]
…
M[N-1][0]x[0]^M[N-1][1]x[1]^…^M[N-1][N-1]x[N-1]=B[N-1]
★:解异或方程也可以套用高斯消元法,只须将原来的加减操作替换成异或操作就可以了,两个方程的左边异或之后,它们的公共项就没有了。
具体的操作方法是这样的:对于k=0..N-1,找到一个M[i][k]不为0的行i,把它与第k行交换,用第k行去异或下面所有M[i][j]不为0的行i,消去它们的第k个系数,这样就将原矩阵化成了上三角矩阵;最后一行只有一个未知数,这个未知数就已经求出来了,用它跟上面所有含有这个未知数的方程异或,就消去了所有的着个未知数,此时倒数第二行也只有一个未知数,它就被求出来了,用这样的方法可以自下而上求出所有未知数。
代码:
http://www.shaidaima.com/source/view/11235
POJ 3185 The Water Bowls
开关灯问题,和POJ1681一样,不过这题数据可没那么好糊弄,要
枚举自由元了~还有怎么求解异或方程组……
代码:
http://www.shaidaima.com/source/view/11236