http://172.20.6.3/Problem_Show.asp?id=1385

 
刚开始想的时候一直以为同一排不同的拉灯顺序对结果是有影响的,手推了好多遍才发现拉灯结果只和拉的灯有关,这也要打表,可以说非常智障了。
如果从上向下寻找拉的灯,那么每一排全暗主要相关的是下一排(通过下一排补齐)和初始状态,而每一排的初始状态是和其本身和上一排有关的,那么只要找出第一排所有的拉灯方案(2^5种)然后对这几种方案模拟一遍找能全亮且步数最小的方案。
锻炼搜索能力的好题 
注意小于6步…交的时候没看见,日常眼瞎1/1。
 
代码
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=(<<)+;
int a[]={};
char ch[]={};
int f[maxn]={};//第一行操作数量
int f1[maxn]={};//第一行操作对第二行的影响
int nn[maxn]={};//第一行操作后得到的数
//以上三个通过dfs计算
int aa[maxn]={};//下一行来填满这一行对下一行的影响
int bb[maxn]={};//对下下一行的影响
int z[maxn]={};//操作数量
//以上三个预处理
int ma=maxn-;
void dfs1(int k,int num,int d,int z){
if(k>=){
f[z]=d;f1[z]=z;nn[z]=num;
return;
}
int w=<<k,w1;
if(k>=)w1=(<<(k-))&ma;
else w1=/;
dfs1(k+,num,d,z);
dfs1(k+,num^w1,d+,z^w);
}
int main(){
//freopen("wtf.in","r",stdin);
//freopen("wtf.out","w",stdout);
int T;scanf("%d",&T);
for(int i=;i<=ma;i++){
int k=;
for(int j=;j<=;j++){
int w=<<k,w1;
if(k>=)w1=(<<(k-))&ma;
else w1=/;
if((i&w)==) aa[i]=aa[i]^w1,z[i]++;
k--;
}
bb[i]=(~i)&ma;
}
while(T-->){
memset(a,,sizeof(a));
for(int i=;i<=;i++){
scanf("%s",&ch);
for(int j=;j<=;j++){
a[i]*=;
a[i]+=ch[j-]-'';
}
}memset(f,,sizeof(f));
int da=f[];
dfs1(,a[],,);
int ans=da;
for(int i=;i<=ma;i++){
int nex1=aa[nn[i]],nex2=bb[nn[i]],bu=f[i]+z[nn[i]],num=f1[i],zz;
for(int j=;j<=;j++){
num=num^a[j]^nex1;//初始状态
nex1=aa[num];//填满需要几步
if(j==&&num==ma)ans=min(ans,bu);
bu+=z[num];
zz=nex2;nex2=bb[num];num=zz;//填满这一行对下下一行的影响
}
}
if(ans>)printf("%d\n",-);
else printf("%d\n",ans);
}
return ;
}

JZYZOJ 1385 拉灯游戏 状态压缩 搜索的更多相关文章

  1. POJ 1632 Vase collection【状态压缩+搜索】

    题目传送门:http://poj.org/problem?id=1632 Vase collection Time Limit: 1000MS   Memory Limit: 10000K Total ...

  2. Codeforces3C. Tic-tac-toe 题解 状态压缩+搜索

    作者:zifeiy 标签:状态压缩.搜索 题目链接:https://codeforces.com/contest/3/problem/C 题目大意: 有一个 \(3 \times 3\) 的棋盘,给你 ...

  3. CF1114F Please, another Queries on Array?(线段树,数论,欧拉函数,状态压缩)

    这题我在考场上也是想出了正解的……但是没调出来. 题目链接:CF原网 题目大意:给一个长度为 $n$ 的序列 $a$,$q$ 个操作:区间乘 $x$,求区间乘积的欧拉函数模 $10^9+7$ 的值. ...

  4. [Usaco2007 Open]Fliptile 翻格子游戏 状态压缩

    考试想到了状压,苦于T1废掉太长时间,于是默默输出impossible.. 我们知道,一个格子的翻转受其翻转次数和它相邻翻转次数的影响. 由每一个位置操作两次相当于把它翻过来又翻回去,所以答案中每一个 ...

  5. 搜索进阶课件,视频,代码(状态压缩搜索,折半搜索,dfs,bfs总结)

    链接:https://pan.baidu.com/s/1-svffrprCOO4CtQoCTQ9hQ 提取码:h909 复制这段内容后打开百度网盘手机App,操作更方便哦

  6. hdu4845 状态压缩BFS

    题意:      给一个n*m的矩阵,从11,走到nm,格子和格子之间可能有墙,也可能有门,有的格子上面有钥匙,相应的钥匙开相应的们,捡钥匙和开门都不需要时间,问你最少多少部能走到nm. 思路:   ...

  7. loj 1011(状态压缩+记忆化搜索)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=25837 思路:状态压缩+记忆化搜索. #include<io ...

  8. 最大联通子数组之和(dfs,记忆化搜索,状态压缩)

    最大联通子数组,这次的题目,我采用的方法为dfs搜索,按照已经取到的数v[][],来进行搜索过程的状态转移,每次对v[][]中标记为1的所有元素依次取其相邻的未被标记为1的元素,将其标记为1,然而,这 ...

  9. UVA565 Pizza Anyone? (状态压缩,搜索)

    UVA565 Pizza Anyone? 大致题意:现在你要做一份披萨,有A到P共16种食材.现在给你1~12个人对这个披萨加入不同食材的条件(只包含想要和不想要两种)(加号是想要,减号是不想要,不一 ...

随机推荐

  1. 【NOIP】提高组2015 神奇的幻方

    [算法]模拟 #include<cstdio> ; int n,a[maxn][maxn]; int main() { scanf("%d",&n); ,y=n ...

  2. Java并发—— 关键字volatile解析

    简述 关键字volatile可以说是Java虚拟机提供的最轻量级的同步机制,当一个变量定义为volatile,它具有内存可见性以及禁止指令重排序两大特性,为了更好地了解volatile关键字,我们可以 ...

  3. Tunnel Warfare(HDU1540+线段树+区间合并)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1540 题目: 题意:总共有n个村庄,有q次操作,每次操作分为摧毁一座村庄,修复一座村庄,和查询与询问的 ...

  4. SQL SERVER 常用公式

    SQL SERVER 获取当前月的天数 SELECT -DAY(getdate()+-DAY(getdate())) SQL server 除法计算百分比[整数乘1.0否则结果为0或1] CONVER ...

  5. 移动端页面使用rem布局

    阿里团队的高清布局方案代码 所谓高清方案就是根据设备屏幕的DPR(设备像素比,又称DPPX,比如dpr=2时,表示1个CSS像素由4个物理像素点组成) 动态设置 html 的font-size, 同时 ...

  6. LCD实验学习笔记(六):存储控制器

    s3c2440可使用地址空间为1GB(0x00000000到0x40000000). 1G空间分为8个BANK,每个BANK为128MB. 设27条地址线,和8个片选引脚(nGCS0-nGCS7). ...

  7. 盲注脚本2.基于bool

    盲注脚本2.基于bool #!/usr/bin/env python #encoding:utf-8 #by i3ekr #using # python sqlinject.py -D "数 ...

  8. Python模块学习 - IPy

    简介 在IP地址规划中,涉及到计算大量的IP地址,包括网段.网络掩码.广播地址.子网数.IP类型等,即便是专业的网络人员也要进行繁琐的计算,而IPy模块提供了专门针对IPV4地址与IPV6地址的类与工 ...

  9. [hadoop][会装]HBase集群安装--基于hadoop ha模式

    可以参考部署HBase系统(分布式部署) 和基于无HA模式的hadoop下部署相比,主要是修改hbase-site .xml文件,修改如下参数即可: <property> <name ...

  10. saltstack安装和配置

    [root@web9 salt]# vi filetest.sls //ADD file_test: file.managed: - name: /tmp/lulu.com - source: sal ...