题目链接 | 难度等级 | 完成状态 | 完成分数 | 最后编辑时间 | 失误原因(初次提交分数) |
---|---|---|---|---|---|
Explode 'Em All | ★★☆☆☆ | 答案正确 | 100 | 2015-2-5 17:28:50 | 超时(41) |
(AC 360)
给一个地图,问最少放几个炸弹可以把星号都消掉(炸弹炸掉当行当列):
.......... ..***..*.* .*.......* .*.......* .*.......* .....***** .......... .........*
神烦的一题。
527.cpp代码已折叠
展开折叠内容
|
---|
#include<cstdio> #include<algorithm> #include<iostream> using namespace std; #define ci const int & int n,m,deep=1<<30; int a[30]={},Count[1<<25]={}; void dfs(ci _at,ci _r,ci _count) { //到达条件// if(_at>n) { if(Count[_r]<=_count) deep=min(deep,_count); return; } //继续搜索 dfs(_at+1,_r|a[_at],_count); dfs(_at+1,_r,_count+1); } int main() { scanf("%d %d\n",&n,&m); //预处理:Count[i]表示二进制数i中1的个数// for(int i=0;i<(1<<m);++i) Count[i]=Count[i>>1]+(i&1); //录入// for(int i=1;i<=n;++i) { for(int j=0;j<m ;++j ) { char c; scanf("%c",&c); if(c=='*') a[i]|=1<<j; } getchar(); } //深搜// dfs(1,0,0); printf("%d",deep); return 0; } |