冬马党

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)

Submit Status

终于到了冬马党与雪菜党决战的时候了,为了方便,他们的决战之地可看成一个n×m矩阵。

决战前夜,冬马党安插在雪菜党中的内线告诉白学家Kuros,雪菜党已经在他们的决战之地埋下了地雷。

白学家Kuros根据多年来扫雷的经验,推测出雪菜党一定不会在相邻的格子里都放地雷。(两个格子相邻指它们共享一条边)并且,根据先遣部队的探查,某些格子的土地非常坚硬,是不可能埋地雷的。

为了冬马党最终的胜利,Kuros想知道,雪菜党总共有多少种方案来放地雷。

Input

输入第一行为两个整数n,m,表示决战之地的大小。(1≤n≤12,1≤m≤12)

接下来n行,每行m个数,0表示该土地不能放地雷,1表示该土地可以埋地雷。

Output

一行,一个整数,表示总的方案数,答案取100000000的余数。

Sample input and output

Sample Input Sample Output
2 3
1 1 1
0 1 0
9

Source

2014 UESTC Training for Dynamic Programming
解题报告
f(i,j) 表示第i行摆放情况为j的方案数.
用一个dfs进行转移.注意情况:
1.上一行的这个位置已经放了地雷,那么这一行的这里肯定不能再放
2.题目明确禁止这行的这个位置不允许放地雷.
因为我的dfs没有检查同一行两枚地雷相同的情况(非法),所以转移的时候j必须合法,最后答案计数的时候j也必须合法.
最重要的是。。。不要爆了long long(我挂了两发。。)
代码用了滚动数组进行优化~
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <algorithm>
 5 typedef long long ll;
 6 using namespace std;
 7 const ll mod = 100000000;
 8 ll f[2][1 << 13];
 9 bool g[15][15];
10 int n,m,r,cur=0;
11
12 void dfs(int pos,int val,ll add)
13 {
14   if (pos == -1)
15    f[cur][val] = (f[cur][val] + add) % mod;
16   else
17    {
18          if (val >> pos & 1 || !g[r][pos]) //上一行的这个位置已经放了地雷 / 这个地方不允许放地雷
19           dfs(pos-1,val & ~(1 << pos),add);
20          else
21           {
22                 dfs(pos-1,val | (1 << pos),add);
23                 dfs(pos-1,val,add);
24        }
25    }
26 }
27
28
29 bool check(int x)
30 {
31    int pre = 0;
32    for(int i = 0 ; i < m ; ++ i)
33     {
34         int newx = x >> i & 1;
35         if (newx && pre)
36          return false;
37         pre = newx;
38     }
39    return true;
40 }
41
42 int main(int argc,char *argv[])
43 {
44   memset(g,true,sizeof(g));
45   memset(f,0,sizeof(f));
46   scanf("%d%d",&n,&m);
47   for(int i = 0 ; i < n ; ++ i)
48    for(int j = 0 ; j < m ; ++ j)
49     {
50         int temp;
51         scanf("%d",&temp);
52         if (!temp)
53          g[i][j] = false;
54     }
55   r = 0;
56   dfs(m-1,0 , 1);
57   for(int i = 1 ; i < n ; ++ i)
58     {
59        cur ^= 1;
60        r = i;
61        for(int j = 0 ; j < (1 << m) ; ++ j) f[cur][j] = 0;
62        for(int j = 0 ; j < (1 << m) ; ++ j)
63         if (check(j))
64          dfs(m-1,j,f[cur^1][j]);
65       }
66   int ans = 0;
67   for(int i = 0 ; i < (1 << m) ; ++ i)
68    if (check(i))
69     ans = (ans + f[cur][i]) % mod;
70   printf("%lld\n",ans % mod);
71   return 0;
72 }

转载于:https://www.cnblogs.com/Xiper/p/4480762.html

UESTC_冬马党 CDOJ 882相关推荐

  1. UESTC_摩天轮 2015 UESTC Training for Dynamic ProgrammingProblem K

    K - 摩天轮 Time Limit: 10000/4000MS (Java/Others)     Memory Limit: 262143/262143KB (Java/Others) Submi ...

  2. 白色相簿2 coda篇各结局概率分析

    本人很喜欢一款叫做白色相簿2的游戏,最近闲得无聊研究了一下coda中各结局的概率,在这里和各位喜欢二次元和算法的朋友交流 首先,coda篇中选项好感度变化大家可以看这一篇贴吧帖子https://tie ...

  3. python357左轮尺寸_有小伙伴需要左轮枪~DUANG!DUANG!DUANG~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~!...

    查看: 47498|回复: 177 [MOD] 有小伙伴需要"左轮枪"~DUANG!DUANG!DUANG~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~! ...

  4. 基于ssm+jsp的大学生体能训练营管理系统毕业设计源码211633

    ssm大学生体能训练营管理 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤, ...

  5. 【BZOJ-28921171】强袭作战大sz的游戏 权值线段树+单调队列+标记永久化+DP...

    2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MB Submit: 45  Solved: 30 [Submit][Status][Discuss] ...

  6. stack Overflow 的使用

    文章目录 优雅的搜索 1.1要在特定标签内搜索 1.2搜索特定的短语 1.3 限定检索位置 1.4选择性屏蔽 优雅的筛选搜索结果 1. 返回的搜索筛选 2. 特定时间段的帖子 3. 精准的BOOL判断 ...

  7. 牛客题目 - 白色相簿(并查集)

    牛牛的Fib序列 Problem Description 链接:https://ac.nowcoder.com/acm/problem/20793 来源:牛客网 众所周知,一个人或两个人之间的关系是最 ...

  8. 【动漫整理】好番推荐(含微量剧透)

    版权所有,不允许转载,图片侵删 按喜欢的顺序递减排列 命运石之门 科幻/剧情/爱情 [内容介绍] "这一切都是命运石之门的选择!"男主冈部是一个疯狂而中二的科学家,一直致力于时间机 ...

  9. python 连接hive_《go语言从入门到入坟》Go 操作 数据库、Redis、HDFS

    楔子 这里我们来介绍一下如何使用 Go 连接数据库.Redis.HDFS,当然数据库.Redis.HDFS本身我们就不介绍了,这里我们主要介绍如何使用 Go 进行连接并执行相应操作. Go 操作数据库 ...

  10. Stack OverFlow 正确的使用姿势(快速访问、优雅搜索)

    Stack Overflow是一个与程序相关的IT技术问答网站,据说99.9999%的问题都能在这里找到答案,所以想在程序员的路上越走越快,尽早开上跑车,这个利器是必须要掌握的. Stack Over ...

最新文章

  1. json key 命名规范_jsonapi
  2. BZOJ 4802: 欧拉函数(大数因数分解算法 Pollard_rho 和素数测试算法 Miller_Rabin)
  3. 前后端分离系统使用Nginx代理https地址
  4. 嵌入式和非嵌入式_我如何向非技术同事解释词嵌入
  5. 视觉SLAM中使用Matlab标定摄像头
  6. 用科学计算机log21 p x,山东理工大学数据结构期末 试题及答案
  7. 字典的定义、字典的特性(成员操作符)
  8. python获取日期_python 获取日期
  9. jQuery的Select操作集合
  10. PyQt5学习--基本窗口控件--加载文件-QFileDialog
  11. Unity基础——List的用法
  12. VirtualBox安装VBoxGuestAdditions增强功能
  13. easy excel 设置某一列的格式
  14. 轻松完美-实现ECharts双Y轴左右刻度线一致
  15. 如何分组取最新的数据
  16. 怎么恢复删除的微信通讯录好友?这样恢复将友谊进行到底!
  17. 每一个被别人吃得死死的人,其实是…
  18. 启动类上的@MapperScan注解与yml配置中mybatis.mapper-locations和mybatis.type-aliases-package的作用
  19. 短网址跳转微信公众号
  20. 如何进行图片局部转TXT文档

热门文章

  1. 这个世界的本源不是物质,而是物质背后的基本秩序-柏拉图
  2. 【软件测试基础知识】SDK是什么?
  3. VS 错误: cout 不明确
  4. 高校青年教师应该怎么提高收入
  5. traditional 和conventional区别
  6. java 转义_java的StringEscapeUtils转义与反转义
  7. awesome-git 中文版,收集常用 Git 教程、工具 の 资源库
  8. 计算机毕设(附源码)JAVA-SSM基于Yigo平台库房管理系统
  9. wifi 性能 测试 android,WiFi性能测试app下载
  10. 阿里云服务器使用docker安装mysql