SGU 239.Minesweeper
题意:

如图,一列未知的区域长度为n(≤1000),给出第二列的数字,求区域中雷的排列有多少种。
Solution:
搜索。这题看上去1000的范围很大,实际上加上合理的剪枝,状态数会变得非常非常少。
一个雷最多能影响3个格子,直接从上往下枚举这个地方有没有雷。有雷的话给影响的格子的数字减一。
出现负数,或枚举到第k个位置了,第k-2个位置的数不为0的时候都是可以退出的。
这样的搜索策略使得我们几乎不会做无用功,最多向下一层就回到了正确的方向。
实际上代码也只用了15ms
#include <iostream>
using namespace std;
int n, ans;
int s[]; void dfs ( int x )
{
if ( x - > && s[x - ] != ) return;
if ( x == n + ) {
if ( s[n] == ) ++ans;
return ;
}
dfs ( x + );
int flag = ;
for ( int i = -; i <= ; ++i ) {
if ( ( x + i > && x + i <= n ) && --s[x + i] < ) flag = ;
}
if ( !flag ) dfs ( x + );
for ( int i = -; i <= ; ++i ) {
if ( x + i > ) ++s[x - i];
}
}
int main()
{
cin >> n;
for ( int i = ; i <= n; ++i ) {
cin >> s[i];
}
dfs ( );
cout << ans << endl;
}
然而分析复杂度的时候我发现。。。实际上如果我们确定了第一个格子有没有雷,就可以推断出下面所有的情况!
所以只需要枚举第一个格子有没有雷就行了。显然答案的范围也在[0,2]。
由此可以见上面的搜索算法的时间复杂度其实也是O(n)的。
SGU 239.Minesweeper的更多相关文章
- SGU 495. Kids and Prizes
水概率....SGU里难得的水题.... 495. Kids and Prizes Time limit per test: 0.5 second(s)Memory limit: 262144 kil ...
- ACM: SGU 101 Domino- 欧拉回路-并查集
sgu 101 - Domino Time Limit:250MS Memory Limit:4096KB 64bit IO Format:%I64d & %I64u Desc ...
- 【SGU】495. Kids and Prizes
http://acm.sgu.ru/problem.php?contest=0&problem=495 题意:N个箱子M个人,初始N个箱子都有一个礼物,M个人依次等概率取一个箱子,如果有礼物则 ...
- SGU 455 Sequence analysis(Cycle detection,floyd判圈算法)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=455 Due to the slow 'mod' and 'div' operati ...
- SGU 422 Fast Typing(概率DP)
题目大意 某人在打字机上打一个字符串,给出了他打每个字符出错的概率 q[i]. 打一个字符需要单位1的时间,删除一个字符也需要单位1的时间.在任意时刻,他可以花 t 的时间检查整个打出来的字符串,并且 ...
- sgu 104 Little shop of flowers 解题报告及测试数据
104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...
- 树形DP求树的重心 --SGU 134
令一个点的属性值为:去除这个点以及与这个点相连的所有边后得到的连通分量的节点数的最大值. 则树的重心定义为:一个点,这个点的属性值在所有点中是最小的. SGU 134 即要找出所有的重心,并且找出重心 ...
- SGU 170 Particles(规律题)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=170 解题报告:输入两个由'+'和'-'组成的字符串,让你判断第二个串能不能由第一个 ...
- SGU 179 Brackets light(生成字典序的下一个序列)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=179 解题报告:输入一个合法的括号串,求出这个括号串的字典序的下一个串.(认为'(' ...
随机推荐
- HW5.18
public class Solution { public static void main(String[] args) { System.out.printf("%s\t%s\n&qu ...
- 潜语义分析(Latent Semantic Analysis)
LSI(Latent semantic indexing, 潜语义索引)和LSA(Latent semantic analysis,潜语义分析)这两个名字其实是一回事.我们这里称为LSA. LSA源自 ...
- 10个强大的Apache开源模块
1.单点登录模块 LemonLDAP LemonLdap可以很棒地实现Apache的SSO功能,并且可以处理超过 20 万的用户请求.LemonLdap支持Java, PHP, .Net, Perl, ...
- 成都Uber优步司机奖励政策(2月6日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- Redis_基本类型介绍和指令___1
1.Key(键) 主要的方法: ->set key(设置) ->get key(得到) ->del key(删除) ->exitst key(存在) -> expires ...
- windows 文件名太长无法删除的解决方法
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...
- lucene创建索引简单示例
利用空闲时间写了一个使用lucene创建索引简单示例, 1.使用maven创建的项目 2.需要用到的jar如下: 废话不多说,直接贴代码如下: 1.创建索引的类(HelloLucene): packa ...
- jquery如何让滚动条默认在最底部
$(document).ready(function() { $("#content").scrollTop($("#content")[0].offsetHe ...
- FormMove
private { Private declarations } procedure WMMOVE(var Msg: TMessage); message WM_MOVE; proced ...
- Android开发:TextView真正可控、不需要焦点的水平滚动--这才是真正的跑马灯
网上的TextView做跑马灯,大多都是要用到焦点,而且字数要超出滚动区域宽度才能实现滚动,使用起来十分不方便. 这里实现一种真正可控的滚动 (1)不需要焦点 (2)任意字数 (3)滚动从滚动区域右边 ...