冬马党

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(我挂了两发。。)
代码用了滚动数组进行优化~
 
 #include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
typedef long long ll;
using namespace std;
const ll mod = ;
ll f[][ << ];
bool g[][];
int n,m,r,cur=; void dfs(int pos,int val,ll add)
{
if (pos == -)
f[cur][val] = (f[cur][val] + add) % mod;
else
{
if (val >> pos & || !g[r][pos]) //上一行的这个位置已经放了地雷 / 这个地方不允许放地雷
dfs(pos-,val & ~( << pos),add);
else
{
dfs(pos-,val | ( << pos),add);
dfs(pos-,val,add);
}
}
} bool check(int x)
{
int pre = ;
for(int i = ; i < m ; ++ i)
{
int newx = x >> i & ;
if (newx && pre)
return false;
pre = newx;
}
return true;
} int main(int argc,char *argv[])
{
memset(g,true,sizeof(g));
memset(f,,sizeof(f));
scanf("%d%d",&n,&m);
for(int i = ; i < n ; ++ i)
for(int j = ; j < m ; ++ j)
{
int temp;
scanf("%d",&temp);
if (!temp)
g[i][j] = false;
}
r = ;
dfs(m-, , );
for(int i = ; i < n ; ++ i)
{
cur ^= ;
r = i;
for(int j = ; j < ( << m) ; ++ j) f[cur][j] = ;
for(int j = ; j < ( << m) ; ++ j)
if (check(j))
dfs(m-,j,f[cur^][j]);
}
int ans = ;
for(int i = ; i < ( << m) ; ++ i)
if (check(i))
ans = (ans + f[cur][i]) % mod;
printf("%lld\n",ans % mod);
return ;
}

UESTC_冬马党 CDOJ 882的更多相关文章

  1. UESTC 882 冬马党 --状压DP

    定义:dp[i][j]为状态为j时,第i行符合条件的状态数 转移方程:dp[i][j] += dp[i-1][t]   //t为上一行状态,与当前行不冲突. 从第一行开始向下枚举,每次枚举当前行的状态 ...

  2. UESTC_神秘绑架案 CDOJ 881

    神秘绑架案 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...

  3. UESTC_方老师买表 CDOJ 885

    老师买表 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit Stat ...

  4. 2014 UESTC暑前集训动态规划专题解题报告

    A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...

  5. Codeforces 433A (背包)

    题面 传送门 真是令人胃疼的题面 我不管,我要把苹果都给雪菜!(滑稽)(冬马党不要打我) 分析 突然感觉这题跟今年NOIP Day1T2有点像,都是根据数加减来构造背包,只不过这题是01背包而不是完全 ...

  6. 学习进度04(billbill长评数据提取01)

    学习了python写入csv文件自己想了一个小实战,爬取billbill<白色相簿>番剧的长评 网页是动态变化的,往下拉他才会更新出长评,找出关键链接https://api.bilibil ...

  7. UESTC_温泉旅店 CDOJ 878

    天空飘下一朵一朵的雪花,这是一片纯白的世界. 在天空之下的温泉旅店里,雪菜已醉倒在一旁,冬马与春希看了看说着梦话的雪菜,决定找一点玩的来度过这愉快的晚上. 这家旅店提供一种特色游戏,游戏有n张牌,各写 ...

  8. UESTC_摩天轮 2015 UESTC Training for Dynamic Programming<Problem K>

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

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

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

随机推荐

  1. Php开发完全跨站点跨域名单点(SSO)同步登录和注销

    From:http://www.cnblogs.com/JinkoWu/p/5056646.html 先来说说什么是单点登录(SSO).来自百科的介绍:SSO英文全称Single Sign On,单点 ...

  2. SOCKET 实现NAT 穿越

    在当前IPv4NAT盛行的网络环境下,两个用户要直接进行P2P连接是非常困难的.较好的解决办法是借助含公网的用户或是服务器中介实现P2P连接. NAT:Network Address Translat ...

  3. 使用STS 创建spring配置文件

    1.创建一个bean文件 2.输入文件名applicationContext.xml 3.这里会自动显示模板文件 4.创建后,自动填充头不定义 到这里就可以发现,我们创建spring文件时,需要的配置 ...

  4. hiberbate的工作原理

    hibernate 简介:hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库.hibernate核心接口 ...

  5. 格而知之16:我所理解的Block(2)

    11.那么Block到底是怎么实现的呢?试一试通过将Block 的代码转换成普通C语言代码来查看它的实现过程. 要将OC代码转换成C语言代码,可以使用clang编译的一个命令: 通过这个命令能把指定文 ...

  6. 用CSS3实现对图片的放大效果

    用CSS3对图片放大效果 .right_div .topicons li a:hover img{     -webkit-transform:scale(1.5,1.5);     -moz-tra ...

  7. [Immutable.js] Working with Subsets of an Immutable.js Map()

    Immutable.js offers methods to break immutable structures into subsets much like Array--for instance ...

  8. C. Robot(BFS)

    C. Robot Time Limit: 3000ms Case Time Limit: 3000ms Memory Limit: 262144KB 64-bit integer IO format: ...

  9. 高逼格的实现WiFi共享,不安装第三方wifi共享软件,两种方式实现开启wifi的功能

    作为一枚程序员,不会点高逼格的doc命令,那么都有点感觉对不起自己的行业了,好了废话就到这里了   第一种方式: 首先使用cmd命令:window键+R 然后输入cmd回车 第一种方式: 第一步: 设 ...

  10. java反射机制初探

    最近和一位师兄交流了一下Java,真可谓是大有收获,让我好好的学习了一下javad的反射机制,同终于明白了spring等框架的一个基本实现的思想,那么今天就和大家分享一下java的反射机制. 反射,r ...