BZOJ1088 [SCOI2005]扫雷Mine 动态规划
欢迎访问~原文出处——博客园-zhouzhendong
去博客园看该题解
题目传送门 - BZOJ1088
题意概括
扫雷。只有2行。第2行没有雷,第一行有雷。告诉你第二行显示的数组,问有几种摆放方式。
题解
动态规划。
用dp[i][0][0]表示当前位置为0,前一位置为0的方案总数,
用dp[i][0][1]表示当前位置为1,前一位置为0的方案总数,
用dp[i][1][0]表示当前位置为0,前一位置为1的方案总数,
用dp[i][1][1]表示当前位置为1,前一位置为1的方案总数,
然后分各种情况转移即可。
网上又说直接模拟的——代码比我短好多!都是大佬!Orz
代码
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
#include <cstdio>
using namespace std;
typedef long long LL;
const int N=+;
int n,a[N];
LL dp[N][][];
int main(){
scanf("%d",&n);
for (int i=;i<=n;i++)
scanf("%d",&a[i]);
for (int i=;i<=n;i++)
if (a[i]>)
{printf("");return ;}
if (a[]>||a[n]>)
{printf("");return ;}
memset(dp,,sizeof dp);
if (a[]==)
dp[][][]=;
else if (a[]==)
dp[][][]=dp[][][]=;
else if (a[]==)
dp[][][]=;
for (int i=;i<=n;i++){
int v=a[i-];
LL p00=dp[i-][][],p01=dp[i-][][],p10=dp[i-][][],p11=dp[i-][][];
LL &n00=dp[i][][],&n01=dp[i][][],&n10=dp[i][][],&n11=dp[i][][];
if (a[i]==){
if (v>)
{printf("");return ;}
if (v==)
n00+=p10;
else if (v==)
n00+=p00;
}
else if (a[i]==){
if (v==)
{printf("");return ;}
if (v==)
n10+=p11,n01+=p10;
else if (v==)
n10+=p01,n01+=p00,n00+=p10;
else if (v==)
n00+=p00;
}
else if (a[i]==){
if (v==)
{printf("");return ;}
if (v==)
n01+=p00,n10+=p01;
else if (v==)
n11+=p01,n10+=p11,n01+=p10;
else if (v==)
n11+=p11;
}
else if (a[i]==){
if (v<)
{printf("");return ;}
if (v==)
n11+=p01;
else
n11+=p11;
}
}
LL ans;
if (a[n]==)
ans=dp[n][][];
else if (a[n]==)
ans=dp[n][][]+dp[n][][];
else
ans=dp[n][][];
printf("%lld",ans);
return ;
}
BZOJ1088 [SCOI2005]扫雷Mine 动态规划的更多相关文章
- 【题解】 bzoj1088: [SCOI2005]扫雷Mine (神奇的做法)
bzoj1088,懒得复制,戳我戳我 Solution: 其实这个有个结论,答案只会有\(0\),\(1\),\(2\)三种(我真的是个弱鸡,这个都想不到) 然后我们假设第一个就可以推出所有的状态(显 ...
- BZOJ1088: [SCOI2005]扫雷Mine
这道题A的好莫名其妙啊2333 传送门 状压DP,枚举上一个雷的分布情况(1<<3)-1,然后和当前的分布相结合,推出下一状态. //BZOJ 1088 //by Cydiater //2 ...
- 【暴力】【推导】bzoj1088 [SCOI2005]扫雷Mine
考虑右侧的一个格子是否放雷,只可能对其左侧的三个格子造成影响. 也就是说,若左侧一个格子旁的两个格子已经放了雷,对第三个格子也就唯一确定了. 因此只枚举前两个格子是否放雷,剩下的暴力判断是否合法即可. ...
- [BZOJ1088][SCOI2005]扫雷Mine DP
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1088 记录下每一个格子对应左边格子放的雷的情况,然后dp转移就好了. #include&l ...
- 【递推】BZOJ 1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2275 Solved: 1328[Submit][St ...
- 【BZOJ】1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Description 相 信大家都玩过扫雷的游戏.那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”人国流行起了一种简单的 ...
- bzoj 1088: [SCOI2005]扫雷Mine
题目链接 1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2525 Solved: 1495[Submi ...
- 1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 979[Submit][Sta ...
- BZOJ 1088: [SCOI2005]扫雷Mine【思维题,神奇的模拟+枚举】
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3791 Solved: 2234[Submit][St ...
随机推荐
- Idea下安装Lombok插件
参照:http://www.cnblogs.com/holten/p/5729226.html https://yq.aliyun.com/articles/59972 lombok是一个可以通过简单 ...
- aircrack-ng套件学习笔记
Aircrack-ng套件 1.airdecap-ng 该工具主要用于对加密无线数据报文的解码. 1.当无线网络启用了WEP或者WPA-PASK加密,可以使用wireshark过滤,过滤条件为:IEE ...
- JS——取消事件冒泡,实现div的显示与隐藏 event.cancelBubble = true;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Java SE之字符串常量池
Reference Document: 什么是字符串常量池? http://www.importnew.com/10756.html[Recommend] Java常量池理解与总结 http: ...
- 深入解析Java AtomicInteger 原子类型
深入解析Java AtomicInteger原子类型 在进行并发编程的时候我们需要确保程序在被多个线程并发访问时可以得到正确的结果,也就是实现线程安全.线程安全的定义如下: 当多个线程访问某个类时,不 ...
- Android测试技能树
Android 基础知识 Android 的体系结构 apk 的组成结构 adb 命令的使用 Android 的四大组件 Activity 的生命周期 … 测试/开发环境的准备 JDK 安装 SDK ...
- 2017-2018-2 20155303『网络对抗技术』Exp8:Web基础
2017-2018-2 『网络对抗技术』Exp8:Web基础 --------CONTENTS-------- 一.原理与实践说明 1.实践具体要求 2.基础问题回答 二.实践过程记录 1.Web前端 ...
- Vim中自动在程序起始处添加版权和作者信息
在编写程序的时候,经常需要在程序开始写上程序的简要介绍和作者信息,如下: 这种信息,除了文件名和修改时间可能经常发生变化外,其他基本不变,可以在程序开始自动加入,方法就是在家目录下的.vimrc中写入 ...
- 机器学习编程语言之争,Python夺魁
机器学习编程语言之争,Python夺魁 随着科技的发展,拥有高容量.高速度和多样性的大数据已经成为当今时代的主题词.数据科学领域中所采用的机器学习编程语言大相径庭.究竟哪种语言最适合机器学习成为争论不 ...
- vue的学习(常用功能)
1.介绍vue MVP和MVVM模式!!! mvp模式,其中m是模型是ajax请求数据, v是视图层(html),p是控制器,就是使用jq来实现业务逻辑相关操作(DOM操作很多) MVVM模式,其中M ...