好吧,,这道题。。本来以为挺难的。打了个暴力bfs+hash(期望得分30,实际得分30)

奇特的是,这道题如果不用hash(期望得分20,实际得分100),好吧数据实在是太水了(不会T吗?)

然后我们寻找正解

在此膜一下巨神学弟clz

著名的clz告诉我们,我们只需要暴力枚举第一行的情况,然后可以直接O(n^7m)得出结果??

因为我们知道,假设第一行的情况是确定的,并且我们已经递归到了第二行的第i个按钮。

那么panel[1][i-1]若是不亮的,那么我们必须要按这个按钮,因为除了这种办法没有办法使panel[1][i-1]变亮。

后n-2行同理

虽然跑的比标程慢,但是好理解多啦!!

顺便提一下标程的解法:

标程的解法其实差不多,不过在暴力枚举第一行的同时还暴力枚举了第一列,这样做的时候判断次数减少,所以更快

复杂度玄学。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
bool block[][];
bool now[][];
int ans,n,m,t;
char ch;
int sum;
/*inline void fan(int x,int y)
{
for(int i=x-1;i<=x+1;i++)
for(int j=y-1;j<=y+1;j++)
now[i][j]^=1;
}*/
inline void fan(int x,int y)
{
now[x-][y-]^=;now[x-][y]^=;now[x-][y+]^=;
now[x][y-]^=;now[x][y]^=;now[x][y+]^=;
now[x+][y-]^=;now[x+][y]^=;now[x+][y+]^=;
}
void dfs(int num){
if(num>n)
{
for(int i=;i<=m;i++)
{
if(!now[n][i])return;
}
ans=ans<sum?ans:sum;return;
}
fan(num,);sum++;
int s;
s=;
for(int i=;i<m;i++)
if(!now[num-][i])fan(num,i+),sum++,s|=(<<i);
if(now[num-][m])dfs(num+);
for(int i=;i<m;i++)
if((s>>i)&)fan(num,i+),sum--;
fan(num,);sum--;
s=;
for(int i=;i<m;i++)
if(!now[num-][i])fan(num,i+),sum++,s|=(<<i);
if(now[num-][m])dfs(num+);
for(int i=;i<m;i++)
if((s>>i)&)fan(num,i+),sum--;
}
int main(){
// freopen("panel.in","r",stdin);
// freopen("panel.out","w",stdout);
scanf("%d",&t);
for(int i=;i<=t;i++)
{
ans=;
scanf("%d%d",&n,&m);
for(int j=;j<=n;j++)
for(int k=;k<=m;k++)
{
ch=getchar();
if(ch=='*') block[j][k]=;
else if(ch=='.') block[j][k]=;
else --k;
}
for(int s=;s<(<<m);s++)
{
sum=;
for(int j=;j<=n;j++)
for(int k=;k<=m;k++)
now[j][k]=block[j][k];
for(int j=;j<m;j++)
{
if((s>>j)&) fan(,j+),sum++;
}
dfs();
}
if(ans==)puts("-1");
else printf("%d\n",ans);
}
// fclose(stdin);
// fclose(stdout);
}

panel(NOIP模拟赛Round 4)的更多相关文章

  1. 水(NOIP模拟赛Round #10)

    题目描述: 小Z有一个长度为的数列.他有次令人窒息的操作,每次操作可以使某个数字或.他当然是希望这些数字的乘积尽量小了.为了简化题目,你只需输出操作完成后的数列即可. ———————————————— ...

  2. 小红帽的画笔(NOIP模拟赛Round 7)

    又到了神奇的模拟赛时间~ 真是丧~ 好吧我们来看看题目 小红帽是Pop star上最著名的人类画家,她可以将任何画出的东西变成真实的物品.赋予她这样神奇能力的正是她手上的画笔. 小红帽每次作画时,都需 ...

  3. YYH的营救计划(NOIP模拟赛Round 6)

    题目描述 “咚咚咚……”“查水表!”原来是查水表来了,现在哪里找这么热心上门的查表员啊!YYH感动的热泪盈眶,开起了门…… YYH的父亲下班回家,街坊邻居说YYH被一群陌生人强行押上了警车!YYH的父 ...

  4. 题(NOIP模拟赛Round #10)

    题目描述: 有一张的地图,其中的地方是墙,的地方是路.有两种操作: 给出个地点,询问这个地点中活动空间最大的编号.若询问的位置是墙,则活动空间为:否则活动空间为询问地点通过四联通能到达的点的个数.如果 ...

  5. 大(NOIP模拟赛Round #10)

    题目描述: 小Z有个n个点的高清大图,每个点有且只有一条单向边的出边.现在你可以翻转其中的一些边,使他从任何一个点都不能通过一些道路走回这个点.为了方便,你只需输出方案数对取模即可.当在两个方案中有任 ...

  6. bananahill(NOIP模拟赛Round 8)

    题目描述 香蕉川由座香蕉山组成,第i座山有它的高度.小Z准备从左到右爬这里的恰好座香蕉山,但他不希望山的高度起伏太大,太过颠簸,会让本就体育不好的他过于劳累.所以他定义了爬山的劳累度是所有爬的相邻的两 ...

  7. 战斗机的祈雨仪式(NOIP模拟赛Round 7)

    [问题描述] 炎炎夏日,如果没有一场大雨怎么才能尽兴?秋之国的人民准备了一场祈雨仪式.战斗机由于拥有操纵雷电的能力,所以也加入了其中,为此,她进行了一番准备. 战斗机需要给自己的Spear of Lo ...

  8. 魔法使的烟花(NOIP模拟赛Round 7)

    [问题描述] 魔法森林里有很多蘑菇,魔法使常常采摘它们来制作魔法药水.为了在6月的那个奇妙的晚上用魔法绽放出最绚丽的烟花,魔法使决定对魔法森林进行一番彻底的勘探. 魔法森林分为n个区域,由n-1条长度 ...

  9. 灰姑娘的水晶鞋(NOIP模拟赛Round 7)

    [问题描述] 传说中的水晶鞋有两种颜色:左边的水晶鞋是红色,右边的是蓝色,据说穿上它们会有神奇的力量. 灰姑娘要找到她所有的n双水晶鞋,它们散落在一条数轴的正半轴上,坐标各不相同,每双水晶鞋还有一个权 ...

随机推荐

  1. Makefile (3) 基本语法和使用

    make是用来管理一个工程项目的工具 . Makefile就是这个项目文件 . 1.Makefile 是由若干条规则组成的,每个规则的语法如下所示 : #规则 targets: prerequisit ...

  2. spider_main.py

    coding=UTF-8 import html_download import html_outputer import html_parser import url_maneger class S ...

  3. Alter the structure of web pages with JavaScript

    Most of the DOM methods you've seen so far are useful for identifying elements. Both getElementById ...

  4. Eclipse 创建 Java 类---Eclipse教程第10课

    打开新建 Java 类向导 你可以使用新建 Java 类向导来创建 Java 类,可以通过以下途径打开 Java 类向导: 点击 "File" 菜单并选择 New > Cla ...

  5. MQ消息中间件

    MQ是什么? MQ是Message Queue消息队列的缩写.消息队列是一种应用程序对应用程序的通信方法.应用程序通过写和检索入列队的针对应用程序的数据(消息)来进行通信,而不需要专用连接来链接它们. ...

  6. 更改maven本地仓库地址

    1.进入maven安装conf文件中,编辑settings.xml文件,新增图中的圈出的内容(我想要存放的地址是D:\HMY\m2\repository) 2.复制settings.xml文件至D:\ ...

  7. java初学3

    1.包装类 Java提倡的万物皆对象,但是数据类型的划分出现了基本数据类型和引用数据类型,那么我们怎么能把基本数据类型称为对象呢? Java为每个原始类型提供了封装类,Integer是java为int ...

  8. python中的字符问题

    unicode/unicodebig/utf8 在python上默认情况下都解析不了 window系统中 ASCLL对应的是GBK unicode|unicodebigendian 对应 utf-16 ...

  9. CentOS下Apache虚拟主机配置

    通过phpinfo可以看到Apache安装的目录 修改配置文件,首先将配置文件备份 编辑httpd.conf,并找到虚拟路径配置的部分 vi httpd.conf 在vi下先按esc在键入 :/vho ...

  10. Rational Rose 使用技巧

    1.浏览区 2.菜单项 其中Format选项中: 决定各项是否显示,也可以通过右击-option选择 3.常用快捷键: F1:任何时候都可以按F1获得相关帮助,把鼠标放在某条菜单上按F1可以获得这条菜 ...