Paint on a Wall

题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=4012

搜索+状态压缩

这题刚开始以为是dp(之前写过墙是一行的题,然而是在艾神讲完之后才调出来的= =),但是想不出来怎么搞,看到n<=8数据量这么小,应该搜索可以解,然后想都没想就上去写了IDA*,结果有段代码怎么都找不到bug,一直WA。

结束后,用bfs写了遍,每次转移数最多是(2n)^2,最差的情况是2n层,所以复杂度是(2n)^(4n),然而状态去重后,状态数最多为2^(2n)种,复杂度为[(2n)^2]*[2^(2n)],由于n很小,所以不会超时。然而如果用之前的IDA*,差不多会把深度小于deep的所有解空间遍历,一定会超时。

debug用了好几个小时,最后发现是

(lower&bit[other*n+i])>

写成了

(lower&bit[other*n+i])==

...不想说什么了...

代码如下:

 #include<cstdio>
#include<cstring>
#include<queue>
#define met(a,b) memset(a,b,sizeof(a))
#define mkp(state,deep) make_pair(state,deep)
#define X first
#define Y second
#define N 8
using namespace std;
typedef pair<int,int> P;
int T,n,ans,before,after;
char mp[][N+];
bool state[<<];
int bit[];
void init(){
for(int i=;i<=;++i)
bit[i]=(<<i);
}
void bfs(){
int finish=(<<(*n))-;
met(state,);
queue<P>q;
q.push(mkp(,));
state[]=;
while(!q.empty()){
P s=q.front();q.pop();
if(s.X==finish){
ans=s.Y;
return;
}
for(int c=;c<n;++c)
for(int r=;r<;++r)
if((s.X&bit[r*n+c])==){
char color=mp[r][c];
int other=(int)(!r);
int upper=s.X;
int lower=s.X;
int deep=s.Y;
for(int i=c;i<n;++i){
if((upper&bit[r*n+i])>&&mp[r][i]!=color)
upper^=bit[r*n+i];
else if((upper&bit[r*n+i])==&&mp[r][i]==color)
upper|=bit[r*n+i];
if((lower&bit[other*n+i])>&&mp[other][i]!=color)
lower^=bit[other*n+i];
else if((lower&bit[other*n+i])==&&mp[other][i]==color)
lower|=bit[other*n+i];
if(!state[upper]){
state[upper]=;
q.push(mkp(upper,deep+));
}
int temp;
if(r==)temp=(before&upper)|(after&lower);
else if(r==)temp=(after&upper)|(before&lower);
if(!state[temp]){
state[temp]=;
q.push(mkp(temp,deep+));
}
}
}
}
}
int main(void){
init();
scanf("%d",&T);
for(int t=;t<=T;++t){
scanf("%d\n",&n);
before=after=;
for(int i=;i<*n;++i){
if(i<n)before|=(<<i);
else after|=(<<i);
}
for(int i=;i<;++i)
scanf("%s",mp[i]);
bfs();
printf("Case #%d: ",t);
printf("%d\n",ans);
}
}

Paint on a Wall的更多相关文章

  1. HDU 4012 Paint on a Wall(状压+bfs)

    Paint on a Wall Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) ...

  2. LED Decorative Light Manufacturer - Led Wall Lamp Performance Characteristics

    LED Decorative Light Manufacturer    introduction: LED wall lamp is a light-emitting diode as a ligh ...

  3. Daily record-October

    October 11. Hope is a good thing, maybe the best of things, and no good thing ever dies. 希望是美好的,也许是人 ...

  4. 2018 codejam kickstart H轮

    被第一题傻逼题卡了很久……好的我也是个傻逼 倒在了最后一题 本来以为小数据过了就能过大数据 结果下载了大数据 发现怎么输出了好多个零 调代码过程中超时了 结束后重新提交了一下 果然是不通过的 A 题目 ...

  5. HDU 4391 Paint The Wall(分块+延迟标记)

    Paint The Wall Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  6. 线段树 扫描线 L - Atlantis HDU - 1542 M - City Horizon POJ - 3277 N - Paint the Wall HDU - 1543

    学习博客推荐——线段树+扫描线(有关扫描线的理解) 我觉得要注意的几点 1 我的模板线段树的叶子节点存的都是 x[L]~x[L+1] 2 如果没有必要这个lazy 标志是可以不下传的 也就省了一个pu ...

  7. 【HDU4391】【块状链表】Paint The Wall

    Problem Description As a amateur artist, Xenocide loves painting the wall. The wall can be considere ...

  8. hdu 1543 Paint the Wall

    http://acm.hdu.edu.cn/showproblem.php?pid=1543 #include <cstdio> #include <cstring> #inc ...

  9. Paint the Wall ZOJ - 2747

    点数很多,坐标值很大,然后离散化一下用一个点表示一小块的面积对应的颜色,然后更新的时候一块一块更新,查询的时候一块一块查询 #include<map> #include<set> ...

随机推荐

  1. 【C#】Get the html code of a webpage

    As for the title,the console program will show you a sample which can get the webpage-code.Enjoy it: ...

  2. html的map自适应

    Map常识 请自己看吧:http://www.w3school.com.cn/tags/tag_map.asp Map自适应 <!DOCTYPE html> <html> &l ...

  3. less学习:基础语法总结

    一. less是什么 Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充. 注意1):less使用. ...

  4. 深入分析:微信小程序与H5的区别

    作为前端工程师,从前端的视角,为大家分析下微信小程序和HTML5与之间的主要区别 第一条是运行环境的不同. 传统的HTML5的运行环境是浏览器,包括webview,而微信小程序的运行环境并非完整的浏览 ...

  5. kafka服务安装-SuSE Linux Enterprise Server 11 SP3

    kafka是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率. 更多说明请自行了解,直接进入主题. kakfa 安装之前需要安装jdk,不做更多说明 一.下载kafka  进入下载页面:http: ...

  6. oracle数据库一些用户管理语句

    查询所有数据库用户 select * from dba_users 查看数据库名称 select name from v$database 查看权限 select * from user_sys_pr ...

  7. ng动态显示和隐藏

    <!DOCTYPE html><html><head><meta charset="utf-8"><script src=&q ...

  8. maven初步入门demo

    Maven是跨平台的项目管理工具.作为Apache组织中的一个颇为成功的开源项目,主要服务于基于java平台的项目构建.依赖管理和项目信息管理. maven本身使用java开发而成,所以使用前确保电脑 ...

  9. 在server2012安装tfs遇到的问题:KB2919355

    参考资料:http://blog.csdn.net/wo_984633714/article/details/52869851 安装tfs2015的时候,提示需要安装KB2919355的更新.然后我就 ...

  10. feature2d相关

    1.Harris角点检测 是基于灰度图像的角点检测. 灰度变化率函数如下: 其中的w(x,y)为加权函数,可为常数或为高斯函数.之后对E(u,v)进行泰勒级数的展开与化简,最终得到 ,,Ix,Iy是图 ...