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 解题报告:输入一个合法的括号串,求出这个括号串的字典序的下一个串.(认为'(' ...
随机推荐
- UVa1449 - Dominating Patterns(AC自动机)
题目大意 给定n个由小写字母组成的字符串和一个文本串T,你的任务是找出那些字符串在文本中出现的次数最多 题解 一个文本串,多个模式串,这刚好是AC自动机处理的问题 代码: #include <i ...
- weblogic启动时日志重定向(nohup.out)
由于weblogic使用 nohup ./startWebLogic.sh & 启动时会将所有日志打印到nohup.out上,长此以往会导致该文件越来越大,不便于管理. 故下面介绍如何重 ...
- java中服务器启动时,执行定时任务
package com.ripsoft.util; import java.util.Calendar; import java.util.Timer; import javax.servlet.Se ...
- JAVA中使用Redis
上节讲解了如何在centos上安装redis,点击查看.本节我们学习在java中使用redis.需要将jedis-*.jar添加到classpath(点击下载),如果使用连接池还需要commons-p ...
- Unity: How to build and debug external DLLs
法一:http://forum.unity3d.com/threads/161685-How-to-build-and-debug-external-DLLs http://docs.unity3d. ...
- java 5 Lock
import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...
- pixel实践
安装pixel .安装node.js wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz 本地测试下载的是这个版本,如果要高版本的话可以找高版本 ...
- Linux环境高级编程--介绍
从今天開始.将开启Linux环境高级编程(Advanced Programming Of Linux Enviroment)的学习笔记或者说总结,我将持续和大家分享自己的学习成果.本系列博客依托于li ...
- JVM专题
http://blog.csdn.net/ITer_ZC/article/category/2758863
- [转] JAVA正则表达式:Pattern类与Matcher类详解(转)
java.util.regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包.它包括两个类:Pattern和 Matcher Pattern 一个Pattern是一个正则表达式经编译后的 ...