BZOJ 1088 枚举 + 推
2016-05-23 19:48
260 查看
1088: [SCOI2005]扫雷Mine
Description
相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。
Input
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
Output
一个数,即第一列中雷的摆放方案数。
Sample Input
2
1 1
Sample Output
2
很简单,只需要枚举第一个雷的情况,之后的状态可以推出来,详见代码:
Description
相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。
Input
第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)
Output
一个数,即第一列中雷的摆放方案数。
Sample Input
2
1 1
Sample Output
2
很简单,只需要枚举第一个雷的情况,之后的状态可以推出来,详见代码:
#include <cstdio> #include <cstdlib> #include <iostream> #include <cstring> #define N 10010 using namespace std; int n, ans = 0; int line1 , line2 ; int main(void) { scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", &line2[i]); for(int k = 0; k <= min(1, line2[0]); k++) { memset(line1, 0, sizeof(line1)); line1[0] = k; line1[1] = line2[0] - line1[0]; for(int i = 2; i <= n; i++) { line1[i] = line2[i - 1] - line1[i - 1] - line1[i - 2]; } if (line1 == 0) ans++;//最后要检验是否雷放完 } printf("%d\n", ans); return 0; }
相关文章推荐
- 阅读程序(3)
- Struts2国际化
- Tomcat 的运行机制
- WebView实现html文件选择(input type=file),兼容安卓6.0
- <OJ_Sicily>DAG
- Scala正则使用
- HBase简介(很好的梳理资料)
- Android开发实践 网络通信 URL、URLConnection、HttpClient
- 剑指Offer——表示数值的字符串
- 昂贵的聘礼 最短路 dijkstra
- 第10章 C# 数据库编程技术
- 【Arduino官方教程第零辑】基础部分 1-3 Arduino软件(IDE)
- 第十三周项目54-交通工具类
- leetcode 202 Happy Number C++
- Struts2 Unexpected Exception提交表单控制台报Exception
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- RxJava——响应式和区域化的优秀框架(java&android)
- Android应用保护
- 一周总结
- kissme