[POJ 1222] EXTENDED LIGHTS OUT

来源:互联网 发布:工业自动化软件 编辑:程序博客网 时间:2024/05/09 23:37

题目

http://acm.pku.edu.cn/JudgeOnline/problem?id=1222


描述

给你一个5行6列的矩阵分别表示30个灯,矩阵map[i][j]为1表示灯亮着, 0表示灯没亮. 要求你输出解决方案. press[i][j]为1表示按一下,0表示不按。使得最后状态为所有灯都熄灭。


分析

高斯消元法(Gaussian elimination method)

=>
对于每个格子 map[i][j], 能影响他的格子为 (i-1, j), (i, j-1), (i+1, j), (i, j+1), 以及自身(i, j).

=> (press[i-1][j] + press[i][j-1] + press[i+1][j] + press[i][j+1] + press[i][j] + map[i][j]) & 1 = 0 // press[x][y] 表示 0: 不按; 1: 按下.

=> (press[i-1][j] + press[i][j-1] + press[i+1][j] + press[i][j+1] + press[i][j]) & 1 = map[i][j]

那么就可以为每个格子列出一个方程, 得到共 30 个方程的方程组, 进而用高斯消元法来解方程组.

// 先给格子编好号 1 -> 30
// 然后就可以压缩为一维
=>
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24

将涉及不到的格子的系数设为 0.

然后就是普通的高斯消元了.

O(n3)

还有没有比高斯消元更优化的方法?
可不可以从未知量系数非0即1来考虑?

0 0
原创粉丝点击