网格里放了一些石块,一个炸弹能炸开其所在的行和列。问炸光石块至少要几个炸弹。

枚举不炸开的行数,则可以得出还要炸开几列。

为了不让复杂度爆炸,需要两个优化。

先是递推预处理出f(i)表示i的二进制位中1的个数,f(i)=f(i-2^k)+1,k是可以推算出来的。

还要DFS枚举不炸开的行数,防止重复访问。(类似容斥的时候的写法)

#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,f[1<<25],g[1<<25],zt[26],ans=2147483647;
char a[30][30];
void dfs(int S,int cur,int now){
ans=min(ans,n-now+(f[S]-(n-now)<0 ? 0 : f[S]-(n-now)));
for(int i=cur+1;i<=n;++i){
dfs(S|zt[i],i,now+1);
}
}
int main(){
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%s",a[i]+1);
for(int j=1;j<=m;++j){
if(a[i][j]=='*'){
zt[i]|=(1<<(j-1));
}
}
}
for(int i=1,j=0;i<(1<<m);++i){
if(i==(1<<j)){
++j;
}
f[i]=f[i-(1<<(j-1))]+1;
}
dfs(0,0,0);
printf("%d\n",ans);
return 0;
}

【递推】【DFS】【枚举】Gym - 101246C - Explode 'Em All的更多相关文章

  1. [递推+dfs]ZOJ 3436. July Number

    题目大意: 将一个数字的相邻两位的差(的绝对值)组成一个新的数字.不断反复.假设最后得到7,就称这个数为July Number,比方9024 – 922 – 70 – 7. 题目要求1e9范围内给定区 ...

  2. Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)

    试题 算法训练 步与血 问题描述 有n*n的方格,其中有m个障碍,第i个障碍会消耗你p[i]点血.初始你有C点血,你需要从(1,1)到(n,n),并保证血量大于0,求最小步数. 输入格式 第一行3个整 ...

  3. HDU 4733 G(x) (2013成都网络赛,递推)

    G(x) Time Limit: 2000/500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  4. UVA 11464 偶数矩阵(递推 | 进制)

    题目链接:https://vjudge.net/problem/UVA-11464 一道比较好的题目. 思路如下: 如果我们枚举每一个数字“变”还是“不变”,那么需要枚举$2^{255}$种情况,很显 ...

  5. hdu5965扫雷 枚举+递推

    题目链接 思路:枚举第一列的可能种数,然后递推即可,中途判断是否满足条件,最后再判断最后一列是否满足条件即可. #include<bits/stdc++.h> #define LL lon ...

  6. Coconuts, Revisited(递推+枚举+模拟)

    Description The short story titled Coconuts, by Ben Ames Williams, appeared in the Saturday Evening ...

  7. [数位DP]把枚举变成递推(未完)

    动态规划(DP)是个很玄学的东西 数位DP实际上 就是把数字上的枚举变成按位的递推 有伪代码 for i =这一位起始值 i<=这一位终止值 dp[这一位][i]+=dp[这一位-1][i]+- ...

  8. HRBUST 1211 火车上的人数【数论解方程/模拟之枚举+递推】

    火车从始发站(称为第1站)开出,在始发站上车的人数为a,然后到达第2站,在第2站有人上.下车,但上.下车的人数相同,因此在第2站开出时(即在到达第3站之前)车上的人数保持为a人.从第3站起(包括第3站 ...

  9. codeforces Gym 100338H High Speed Trains (递推,高精度)

    递推就好了,用二项式定理算出所有连边的方案数,减去不合法的方案, 每次选出一个孤立点,那么对应方案数就是上次的答案. 枚举选几个孤立点和选哪些,选到n-1个点的时候相当于都不选,只减1. 要用到高精度 ...

随机推荐

  1. MVC4 AspNet MVC下的Ajax / 使用JQuery做相关的Ajax请求

    源码参考:链接:http://pan.baidu.com/s/1pKhHHMj  密码:mkr4 1:新建-->项目-->Web-->ASP.NET MVC 4 Web 应用程序.命 ...

  2. bzoj 1912 tree_dp

    这道题我们加一条路可以减少的代价为这条路两端点到lca的路径的长度,相当于一条链,那么如果加了两条链的话,这两条链重复的部分还是要走两遍,反而对答案没有了贡献(其实这个可以由任意两条链都可以看成两条不 ...

  3. Windows Resizer

    Windows ResizerWindows Resizer是chrome浏览器插件,可以调整视口大小

  4. Coursera在线学习---第九节(2).推荐系统

    一.基于内容的推荐系统(Content Based Recommendations) 所谓基于内容的推荐,就是知道待推荐产品的一些特征情况,将产品的这些特征作为特征变量构建模型来预测.比如,下面的电影 ...

  5. epoll内核源码分析

    转载:https://www.nowcoder.com/discuss/26226?type=0&order=0&pos=27&page=1 /*  *  fs/eventpo ...

  6. 3D Studio Max [www]

    https://github.com/RealityFactory/Exporters https://github.com/code-google-com/3ds-max-dev https://g ...

  7. PBFT算法的相关问题

    PBFT(99.02年发了两篇论文)-从开始的口头算法(指数级)到多项式级 要求 n>3f why: 个人简单理解:注意主节点是可以拜占庭的,从节点对于(n,v,m)的投票最开始也是基于主节点给 ...

  8. HDU 6146 Pokémon GO DP,计数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6146 题意:~ 解法:原题..http://blog.csdn.net/y990041769/arti ...

  9. java 默认内存大小

    https://www.cnblogs.com/jack204/archive/2012/07/02/2572932.html -Xmx   Java Heap最大值,默认值为物理内存的1/4,最佳设 ...

  10. ffmepg的基本使用

    基本使用命令 ffmpeg -i input.mp4 output.avi //视频格式转换 ffmepg -i input.mp4 -r fps image%3d.jpg //视频转成图片 //fp ...