博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【BZOJ1088】[SCOI2005] 扫雷Mine(分类讨论)
阅读量:5209 次
发布时间:2019-06-14

本文共 1081 字,大约阅读时间需要 3 分钟。

大致题意: 给你一个\(2*n\)的扫雷棋盘,现让你根据第二列的信息确定第一列有多少种摆法。

扫雷性质

听说这是一道动态规划+数学题。

其实,根据扫雷游戏某个性质只要确定了第一个格子是否有雷,就可以确定整列雷的分布情况

因此,最多只可能有两种摆法。

这样一来,只要对第一个格子是否有雷分类讨论即可,遇到合法的情况就将\(ans\)\(1\)

如何确定整列雷的分布情况

我们再来说一下应如何根据第一个格子是否有雷来确定整列雷的分布情况。

我们可以用\(a_i\)来存储第二列的信息,并用\(s_i\)来表示第\(i\)位是否有雷。

则对于第\(x\)位,不难发现\(s_{x-2}+s_{x-1}+s_x=a_{x-1}\)

由于\(a_{x-1}\)是题目给出的,所以确定了\(s_{x-2}\)\(s_{x-1}\),我们就可以得到\(s_x=a_{x-1}-s_{x-2}-s_{x-1}\)

然后,我们就可以对\(s_x\)是否合法进行判断,从而判断是否存在不合法情况。

代码

#include
#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))#define uint unsigned int#define LL long long#define ull unsigned long long#define swap(x,y) (x^=y,y^=x,x^=y)#define abs(x) ((x)<0?-(x):(x))#define INF 1e9#define Inc(x,y) ((x+=(y))>=MOD&&(x-=MOD))#define ten(x) (((x)<<3)+((x)<<1))#define N 10000using namespace std;int n,a[N+5],s[N+5];class FIO{ private: #define Fsize 100000 #define tc() (FinNow==FinEnd&&(FinEnd=(FinNow=Fin)+fread(Fin,1,Fsize,stdin),FinNow==FinEnd)?EOF:*FinNow++) #define pc(ch) (FoutSize

转载于:https://www.cnblogs.com/chenxiaoran666/p/BZOJ1088.html

你可能感兴趣的文章
MySQL存储引擎
查看>>
手势的注意事项
查看>>
【AIM Tech Round 5 (rated, Div. 1 + Div. 2) 总结】【题解往前或往后翻,不在这】
查看>>
【t077】宝物筛选
查看>>
利用dwebsocket在Django中使用Websocket
查看>>
JS中一切皆对象,对象即函数,一切皆函数……
查看>>
算法导论 第六章 堆排序
查看>>
java-redis集合数据操作示例(三)
查看>>
A01 安装Redhat6.5
查看>>
必应缤纷桌面的使用测试
查看>>
运用arcgis sever 进行地图发布
查看>>
步步为营-39-数据的导入导出
查看>>
hanoi
查看>>
Add Binary -- leetcode
查看>>
react 中引入 ant-design
查看>>
Eclipse配置Maven私服
查看>>
LVM 扩展逻辑卷轴大小的方法
查看>>
Qt中QComboBox和QPlainTextEdit
查看>>
结对编程
查看>>
调用 COM 对象
查看>>