题目描述

输入输出格式

输入格式:

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1<= N <= 10000)

输出格式:

一个数,即第一列中雷的摆放方案数。

输入输出样例

输入样例#1: 复制

2
1  1

输出样例#1: 复制

2

如果从上到下确定每个雷的位置,那么判断某个位置能否为雷只受它上面2格雷的情况影响,于是可以将i-2~i的雷记录为一个3位的二进制数。考虑状压dp,dp[i][sta]表示前i个雷,i-2~i的雷的分布为sta时的总数,那么dp[i][sta]=dp[i-1][(sta>>1)|4]+dp[i-1][sta>>1],表示第i-2的位置放不放雷。转移前需要判断sta这个状态是否合法。设counter(x)为x的二进制表示中1的个数,num为第二列对应的数字,合法也就意味着counter(sta)==num[i-1]且counter(sta>>1)<=num[i],此时就可以进行转移。

#include<iostream>
#include<cstdio>
#define f(i,l,r) for(i=(l);i<=(r);i++)
using namespace std;
const int MAXN=10005;
int n,a[MAXN];
int dp[MAXN][8],f[8];
inline int cal(int x)
{int i,num=0;for(i=x;i;i-=(i&(-i))){num++;}return num;
}
inline void MakeTable()
{int i;f(i,0,7) f[i]=cal(i);
}
int main()
{
//  ios::sync_with_stdio(false);
//  freopen("data.out","r",stdin);
//  freopen("test.out","w",stdout);int i,j,ans=0;MakeTable();cin>>n;f(i,1,n)  cin>>a[i];dp[1][1]=dp[1][0]=1;f(i,2,n-1){f(j,0,7){if(f[j]!=a[i-1]||f[j&3]>a[i]) continue;dp[i][j]=dp[i-1][(j>>1)|4]+dp[i-1][j>>1];// cout<<i<<' '<<j<<' '<<dp[i-1][(j>>1)|4]<<' '<<dp[i-1][j>>1]<<"GG"<<endl;}}f(i,0,7){if(f[i]!=a[n-1]||f[i&3]!=a[n])  continue;ans+=dp[n-1][(i>>1)|4]+dp[n-1][i>>1];}cout<<ans<<endl;return 0;
}

扫雷 洛谷p2327相关推荐

  1. 洛谷 P2327 [SCOI2005]扫雷

    PS:如果读过题了可以跳过题目描述直接到题解部分 提交链接:洛谷 P2327 [SCOI2005]扫雷 题目 题目描述 相信大家都玩过扫雷的游戏.那是在一个 n*m 的矩阵里面有一些雷,要你根据一些信 ...

  2. 洛谷P2327 [SCOI2005]扫雷 题解

    [SCOI2005]扫雷 - 洛谷 description: 一个 的棋盘.已知右侧一列全部没有雷,且已知第 行相应的格子为 ,表示八联通的格子内共有 个雷.求左侧一列可能的雷的方案数. soluti ...

  3. 洛谷 P2327 [SCOI2005] 扫雷

    题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...

  4. 洛谷P2327 [SCOI2005]扫雷 [2017年5月计划 清北学堂51精英班Day1]

    P2327 [SCOI2005]扫雷 题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一 ...

  5. 洛谷P2327 [SCOI2005]扫雷【DP】【黄】

    Date:2022.02.09 题目描述 相信大家都玩过扫雷的游戏.那是在一个n×m的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,"余"人国流行起了一种简单的扫雷游戏, ...

  6. 洛谷 P2327 [SCOI2005]扫雷 解题报告

    题目 题目分析 题目将扫雷游戏简化,改为只有一列有雷的版本 a[i] 表示第 i 格的数字 f[i][j][k]表示当前做到第 i 个位置,第 i 个位置的状态为 j(1表示无雷,2雷),第 i+1  ...

  7. 洛谷P2327 [SCOI2005] 扫雷

    题目描述 输入输出格式 输入格式: 第一行为N,第二行有N个数,依次为第二列的格子中的数.(1<= N <= 10000) 输出格式: 一个数,即第一列中雷的摆放方案数. 输入输出样例 输 ...

  8. 信息学奥赛一本通 1970:【15NOIP普及组】扫雷游戏 | OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 | 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏

    [题目链接] ybt 1970:[15NOIP普及组]扫雷游戏 OpenJudge NOI 1.8 14:扫雷游戏地雷数计算 洛谷 P2670 [NOIP2015 普及组] 扫雷游戏 [题目考点] 1 ...

  9. 模拟——扫雷游戏(洛谷 P2670)

    模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P2670 也是一道简单模拟的题,没有必要列举出8个if语句逐一判断8个方向, 只需要用一个二维数组来保存8个方向即可. 需要注 ...

最新文章

  1. SSM框架整合(一)
  2. xp服务器文档在哪里,如何在XP系统中创建文件服务器
  3. PHP Collection 类
  4. CSS中position属性(abusolute | relative | static | fixed)区别
  5. 服务器的虚拟化配置,怎么配置服务器的虚拟化环境
  6. 大数据如何改善社会治理:国外“大数据社会福祉”运动的案例分析和借鉴
  7. c#和python_C#学习笔记(与Java、C、C++和Python对比)
  8. windows 匿名管道: 父进程与子进程通信 (进程间通信之CreatePipe)
  9. 开源dns软件PowerDNS BIND9 mydns
  10. java中成员方法_java中的成员变量和方法
  11. 扫拖地机器人预留_进阶规划,扫拖一体,小瓦扫地机器人规划版重度体验
  12. 生产环境部署springcloud微服务启动慢的问题排查
  13. 英语单词在计算机中怎么存放,电脑怎么学英语单词
  14. 用pxe给服务器装系统,使用pxe方式安装系统
  15. 固态硬盘是什么接口_选对接口很重要:固态硬盘接错位置可能损失可达42%
  16. 如何解决WORD安全模式错误问题
  17. 计算机输入d为啥返回桌面,按D键空格键就退出输入回到桌面
  18. 基于微信小程序电商平台
  19. PhotoSwipe.js 相册展示插件学习
  20. PS3/PS4游戏耳机方案|SSS1629|开发设计|台湾鑫创|USB耳机音频方案

热门文章

  1. python面试题库知乎_知乎面试题刷题
  2. 作为开发用的GUI音频处理软件推荐--wavosaur
  3. 集成学习:lightGBM(二)
  4. Go语言如何捕获fatal致命错误并输出到日志
  5. 古代的电子计算机,古代也有黑科技:周朝的智能机器人,元朝的电子计算机!...
  6. Bootstrap栅栏布局里col-xs-*、col-sm-*、col-md-*、col-lg-*之间的区别及使用方法
  7. 微信公众号留言功能怎么开通?
  8. See You Again
  9. Linux下service mysqld start 启动MySQL提示Redirecting to /bin/systemctl start mysqld.servic
  10. php开发商城系统怎么样?有哪些PHP开源商城系统推荐?