好吧,,这道题。。本来以为挺难的。打了个暴力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. 1016-01-首页16-计算配图的frame----MJExtention的使用

    -------HWPhoto.h--------------------------------------------- #import <Foundation/Foundation.h> ...

  2. ACM 最大化平均值问题总结

    主要是应用c(x)的满足条件有共通之处: c(x)表示要求解的那个表达式不小于x 可以找到表达式 v/w>=x 如果 v-x*w>0 说明有贡献 那就把贡献最大的找出来 如果找出来之后 s ...

  3. 为什么不要使用 Async Void ?

    原文:为什么不要使用 Async Void ? 问题 在使用 Abp 框架的后台作业时,当后台作业抛出异常,会导致整个程序崩溃.在 Abp 框架的底层执行后台作业的时候,有 try/catch 语句块 ...

  4. 内部类inner class

    1.什么是内部类,为什么要用内部类? 可以将一个类定义在另一个类的定义内部,这就是内部类. 当描述事物时,事物的内部还有事物,该事物用内部类来描述,因为内部事物在使用外部事物的内容. 如: class ...

  5. MyEclipse - MyEclipse优化

    1.去除不需要的启动加载项 选择菜单:Window --> Preferences -->General --> Startup and Shutdown, 可以关掉的启动项有: J ...

  6. OVGap 原生与JS交互

    源代码:https://github.com/windshg/OVGap OVGap:一个轻量级的类库,能够让iOS应用和远程网页的 Javascript 代码进行通信,也就是说,远程的 Javasc ...

  7. Pytest+allure+jenkins生成测试报告

    allure集成jenkins下载地址.下载相关版本的allure包 http://updates.jenkins-ci.org/download/plugins/allure-jenkins-plu ...

  8. python 读取数据库中文内容显示一堆问号

    需要在连接数据库时 设置编码格式 def select_db(self,db_name): self.conn = MySQLdb.connect( host = self.ip, port = se ...

  9. Wordpress 后台文章编辑区添加模板选择功能

    功能:后台编辑文章时,可以选择文章使用的模板,效果如下图: 操作步骤: <?php /** * Template Name: kbsingle full * Add by Ryan 3/18/2 ...

  10. ALPHA(10)

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...