状态压缩,我们枚举第一行的所有状态,然后根据第一行去转变下面的行,枚举或者深搜直到最后最后一行,可以判断是不是所有的1都可以全部转换为0,记录所有的解,输出最小的一个就可以.

这里有一个很重要的优化,就是当n比m大的,转置这个矩阵,如果不加这个在G++的情况下会超时,C++900Ms多AC.代码及注释如下

#include<stdio.h>
#include<iostream>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
#define inf 0x3f3f3f
int row[],newrow[],n,m;
int dfs(int id,int prerow,int tot)
{
if(id == n)
{
if(prerow != )return inf;
else return tot;
}
int now = newrow[id];///这是当前行
for(int j = ; j < m; j++)
if(prerow & (<<j))///now(当前行)受prerow(前一行)的限制,只有prenow的这一列也是X的时候才可以反转
{
tot++;
now ^= <<j;
if(j > )now ^= <<(j-);
if(j < m-)now ^= <<(j+);
if(id+ < n)newrow[id+] ^= <<(j);///当前行的下一行
}
dfs(id+,now,tot);
}
int main()
{
char maps[][];
while(~scanf("%d%d",&n,&m))
{
if(n == && m == ) return ;
for(int i = ; i < n; i++)
scanf("%s",maps[i]);
if(n >= m)
{
for(int i = ; i < n; i++)
{
row[i] = ;
for(int j = ; j < m; j++)
if(maps[i][j] == 'X')
row[i] |= (<<j);
}
}
else///转置优化
{
for(int i = ; i < m; i++)
{
row[i] = ;
for(int j = ; j < n; j++)
if(maps[j][i] == 'X')
row[i] |= (<<j);
}
swap(n,m);
}
int ans = inf,tot;
for(int i=; i<(<<m); i++)///枚举第一行的所有状态
{
tot = ;
for(int j = ; j < n; j++)
newrow[j] = row[j];
for(int j=; (<<j)<=i; j++)
if(i & (<<j))///如果是X就反转,并且带动周围4个点,边界需要特判
{
tot++;
newrow[] ^= (<<j);
if(j > )newrow[] ^= (<<(j-));
if(j < m-)newrow[] ^= (<<(j+));
if(n > ) newrow[] ^= (<<j);
}
tot = dfs(,newrow[],tot);///开始搜索到最后一行
if(tot < ans)ans = tot;
}
if(ans == inf)printf("Damaged billboard.\n");
else printf("You have to tap %d tiles.\n",ans);
}
return ;
}

HDU 1882 Strange Billboard(状态压缩+转置优化)的更多相关文章

  1. hdu 1882 Strange Billboard(位运算+枚举)

    http://acm.hdu.edu.cn/showproblem.php?pid=1882 感觉非常不错的一道题. 给一个n*m(1<=n,m<=16)的矩阵,每一个格子都有黑白两面,当 ...

  2. HDU 1882 Strange Billboard(位运算)

    题目链接 题意 : 给你一个矩阵,有黑有白,翻转一个块可以让上下左右都翻转过来,问最少翻转多少次能让矩阵变为全白. 思路 : 我们从第一行开始枚举要翻转的状态,最多可以枚举到2的16次方,因为你只要第 ...

  3. hdu 4352 数位dp + 状态压缩

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  4. hdu 2825(ac自动机+状态压缩dp)

    题意:容易理解... 分析:在做这道题之前我做了hdu 4057,都是同一种类型的题,因为题中给的模式串的个数最多只能为10个,所以我们就很容易想到用状态压缩来做,但是开始的时候我的代码超时了dp时我 ...

  5. [HDU 4336] Card Collector (状态压缩概率dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4336 题目大意:有n种卡片,需要吃零食收集,打开零食,出现第i种卡片的概率是p[i],也有可能不出现卡 ...

  6. HDU 4511 (AC自动机+状态压缩DP)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4511 题目大意:从1走到N,中间可以选择性经过某些点,比如1->N,或1->2-> ...

  7. hdu 4856 Tunnels(bfs+状态压缩)

    题目链接:hdu 4856 Tunnels 题目大意:给定一张图,图上有M个管道,管道给定入口和出口,单向,如今有人想要体验下这M个管道,问最短须要移动的距离,起点未定. 解题思路:首先用bfs处理出 ...

  8. HDU 3001 Travelling(状态压缩DP+三进制)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3001 题目大意:有n个城市,m条路,每条路都有一定的花费,可以从任意城市出发,每个城市不能经过两次以上 ...

  9. HDU 4628 Pieces(状态压缩+记忆化搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=4628 题意:给个字符窜,每步都可以删除一个字符窜,问最少用多少步可以删除一个字符窜分析:状态压缩+记忆化搜索  ...

随机推荐

  1. JavaScript在智能手机上的应用-测试是否支持滑动事件

    ---------------------------- <script type="text/javascript">                        ...

  2. 其他应用和技巧-用try和catch来让程序更友好

    ---------------------------- <script type="text/javascript">                    //进行 ...

  3. 开始工作----微信通过get检查当前网站---是否可用

    01开发者--基本配置--url服务器地址---填写好--需要开通微信接口的域名 http://www.cctv.com/xxx.php文件 xxx.php文件 01参考wx_sample.php 0 ...

  4. C++之文件输入输出

    在这里遇见不少的问题,其中的路径问题就是在windows中,\\转义字符才能准确的表示路径 #include <iostream> #include <fstream> #in ...

  5. HDU2629:Identity Card

    Problem Description Do you own an ID card?You must have a identity card number in your family's Hous ...

  6. 更改Xcode的缺省公司名

    更改前: //  testAppDelegate.m //  test // //  Created by gaohf on 11-5-24. //  Copyright 2011 __MyCompa ...

  7. Hadoop 中关于 map,reduce 数量设置

    map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务的分布式并行计算,从这个观点来看,如果将map和reduce的数量设置为1,那么用户的任务 ...

  8. 【实验室笔记】太阳能板清洁器DEMO

    <太阳能板清洁器DEMO>2015年的毕昇杯比赛作品,用时两天,整体设计思路很简单: [机械结构]: 清洁器主体采用角钢搭建,用钢锯切割好以后,上螺丝,走线用的尼龙扎带捆绑: 清洗滚轮采用 ...

  9. js css优化-- 合并和压缩

    在项目框架中,首先要引用很多css和js文件,80%的用户响应时间都是浪费在前端.而这些时间主要又是因为下载图片.样式表.JavaScript脚本.flash等文件造成的.减少这些资源文件的Reque ...

  10. iptables-1.4.19 移植到linux

    ------------------------------------------------------------------------------------------ https://g ...