POJ1222 EXTENDED LIGHTS OUT 由简单深搜引发的二进制高斯消元

 Problem Address:http://poj.org/problem?id=1222

 

就这道题而言,它是一道简单题。

 

 

【深搜思路】

 

(1)从左上角开始向右下角搜索,分别探测按与不按的情况。总共有2^(n*m)总情况。

 

(2)剪枝:每探测一个位置,判断它左上部分是否已全部关闭。由于每次都是向后探测,所以后面的行为不改变左上角的状态。如果存在灯开着的状态,则结束这个分支的搜索。

 

【深搜代码】

 

 

 

但是,这道题的最根本的思路却不是深搜。当然,对于小的数据量,深搜可以应付。但是大的数据却不行。

 

高斯消元法的思路复杂度为O(n^3)。

 

 

【高斯消元法】

 

如果学过矩阵的转换,理解起来就相对比较容易。

 

高斯消元用于求解多元一次方程组。具体百度:http://baike.baidu.com/view/33268.htm

 

先把对应的矩阵化为上三角形式,然后再化为单位矩阵。

 

增广部分即为所求的解。

 

 

【高斯消元思路】

 

参考资料:http://blog.csdn.net/shiren_Bod/archive/2010/07/26/5766907.aspx

 

我看的时候是在百度文库里看的。以上链接里也已经说了很多。

 

主要就是要求出AA*XX=LL。

 

当只有唯一解时,直接求出对应矩阵的逆矩阵就OK了。

 

如果不求逆矩阵,则需要进行转化。

 

说的简单一点,就是把A(i,j)转化为列向量,然后按从左到右的顺序填入n*m阶的矩阵中,然后把L转为列向量,填入增广部分。

 

之后求出解就OK了。

 

由于这道题有唯一解,我也是用转化为列向量的方法求的。

 

由于是二进制,所以全程使用异或,以及最后简化的时候要注意一下。

 

具体见代码。

 

【高斯消元代码】(由于是第一次模仿着写,也没考虑太多,不具备可扩展性,未学习不可模仿)

 

 

高斯消元其实还分为无解、唯一解以及无数解三种情况,思路也不是很难,具体以后碰到了再好好重新实现一遍。

 

【P.S】

 

这道题其实做的挺郁闷的。

 

本来是想找到简单的题做做。这道题是被认为是简单得连剪枝都不用的……然后就无限地卡。最后剪枝了才过。

 

然后看Discuss说可以用高斯消元。反正是学习,所以决定找找资料学习。

 

谁知道一看就看了n久。还好最后看懂了,也看透了。

 

该休息一下了?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值