poj--3279

题意:

给n*m的矩阵,0 1组成,每次翻转一个格子可以将上下左右的五个节点翻转,求,把所有的格子翻转成0;输出每个个字的翻转次数;最少字数;

做法:

从上到下,第一行翻转的情况确定的话就全确定了;因此只要枚举第一行的翻转情况就可以了;

第一行翻转0次或1次;所以可以用二进制化,不用dfs了;具体看代码实现;

对于每一种第一行看需要翻转的次数是否是最小的;

代码如此:

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define inf 0x3f3f3f3f
using namespace std;
int n,m,ans;
int a[][],vis[][]={},t[][]={},p[][]={,,,,,-,,,-,},an[][]={};
bool s[]; //vis数组用来记录主动翻转的情况;t数组用来记录一共翻转的次数;an数组用来记录最终结果;
int solve() //根据第一行的情况确定剩余所有行的情况;
{
for(int i=;i<m;i++)
{
if(vis[][i]==)
{
t[][i]++;
if(n>)
t[][i]++;
if(i<m-)
t[][i+]++;
if(i>)
t[][i-]++;
}
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(t[i-][j]%!=a[i-][j])
{
vis[i][j]=;
for(int z=;z<;z++)
{
int x=i+p[z][],y=j+p[z][];
t[x][y]++;
}
}
}
}
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(t[i][j]%!=a[i][j])
return ;
}
}
return ;
}
int main()
{
while(cin>>n>>m)
{
memset(a,,sizeof(a));
memset(vis,,sizeof(vis));
memset(t,,sizeof(t));
ans=inf;
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int i=;i<pow(2.0,m);i++)
{
memset(vis,,sizeof(vis));
for(int j=m-;j>=;j--)
{
s[j]=i&(<<j);
vis[][j]=s[j];
}
memset(t,,sizeof(t));
int temp=solve(),cou=;
if(temp==)
{
for(int i=;i<n;i++)
{
for(int j=m-;j>=;j--)
{
if(vis[i][j]==)
cou++;
}
}
if(cou<ans)
{
ans=cou;
for(int i=;i<n;i++)
{
for(int j=m-;j>=;j--)
an[i][j]=vis[i][j];
} }
}
}
if(ans!=inf)
for(int i=;i<n;i++)
{
for(int j=;j<m;j++)
{
if(j!=)
printf(" ");
printf("%d",an[i][j]);
}
printf("\n");
}
else
printf("IMPOSSIBLE\n");
} return ;
}

kb-01-d<poj3279>--深搜变种,二进制优化;的更多相关文章

  1. 深搜+DP剪枝 codevs 1047 邮票面值设计

    codevs 1047 邮票面值设计 1999年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description ...

  2. 【wikioi】1049 棋盘染色(迭代深搜)

    http://www.wikioi.com/problem/1049/ 这题我之前写没想到迭代加深,看了题解,然后学习了这种搜索(之前我写的某题也用过,,但是不懂专业名词 囧.) 迭代加深搜索就是限制 ...

  3. TOJ 4976: 新生数(深搜)

    传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4976 时间限制(普通/Java): ...

  4. 天梯赛 L2-20 功夫传人 (深搜)

    一门武功能否传承久远并被发扬光大,是要看缘分的.一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱-- 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹.挖到 ...

  5. NYOJ 10 skiing (深搜和动归)

    skiing 时间限制:3000 ms  |  内存限制:65535 KB 难度:5 描写叙述 Michael喜欢滑雪百这并不奇怪. 由于滑雪的确非常刺激.但是为了获得速度.滑的区域必须向下倾斜.并且 ...

  6. bzoj 1085骑士精神 迭代深搜

    题目传送门 题目大意:给出一幅棋盘,问能否复原,中文题面,不做解释. 思路:第一次写迭代深搜的题目,这道题还是挺经典的.这道题的状态很明显的每多搜一层就是多八倍,非常的多,而且又是t组输入,所以必定有 ...

  7. bzoj 1016 深搜

    首先我们知道MST的一些性质,对于这道题来说就是,假设我们先求出一颗MST设为G,由已知边权相同的边最多会有10条,那么假设我们在这10条边中选取size条边∈G,那么我们在这边权相同的边集E中任意选 ...

  8. 数独(深搜)(poj2726,poj3074)

    数独(深搜)数据最弱版本(poj 2676) Description Sudoku is a very simple task. A square table with 9 rows and 9 co ...

  9. uva12558 Egyptian Fractions (HARD version)(迭代深搜)

    Egyptian Fractions (HARD version) 题解:迭代深搜模板题,因为最小个数,以此为乐观估价函数来迭代深搜,就可以了. #include<cstdio> #inc ...

随机推荐

  1. noip模拟赛#45

    T1:n<=1e6,求最小的区间包含(1,m)的所有数. =>双指针扫一遍即可 #include<cstdio> #include<cstring> #includ ...

  2. HTML5<article>元素

    HTML5<article>元素用来定义页面文档的独立内容. 实例: <article class="pageArticle"> <h2>art ...

  3. Find the Longest Word in a String-freecodecamp算法题目

    Find the Longest Word in a String(找出最长单词) 要求 在句子中找出最长的单词,并返回它的长度 函数的返回值应该是一个数字. 思路 用.split(' ')将句子分隔 ...

  4. 【转】pDc->SelectObject(pOldBrush)恢复画刷

    请看下面的代码:  CDC *pDc=new CClientDC(this); CBrush brush; brush.CreateSolidBrush(RGB(0,255,0)); CBrush * ...

  5. 【贪心 计数 倍增】bzoj4458: GTY的OJ

    倍增写挂调了半个晚上 Description 身为IOI金牌的gtyzs有自己的一个OJ,名曰GOJ.GOJ上的题目可谓是高质量而又经典,他在他的OJ里面定义了一个树形的分类目录,且两个相同级别的目录 ...

  6. 洛谷 1571 眼红的Medusa

    洛谷 1571 眼红的Medusa 虽说这道题标签里写明了二分,然而我还是首先想到了map......毕竟map真的是简单好写. map做法 #include<bits/stdc++.h> ...

  7. JAVA 修改环境变量不重启电脑生效方法

     1. 在安装JDK1.6(高版本)时(本机先安装jdk1.6再安装的jdk1.5),自动将java.exe.javaw.exe.javaws.exe三个可执行文件复制到了C:\Windows\Sys ...

  8. Linux下打包解压命令

    tar 压缩: tar -cvjpf etc.tar.bz2 /etc //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具 ...

  9. 01创建线程CreateThread和_beginthreadex

    Windows多线程之线程创建 一. 线程创建函数 CreateThread 1. 函数原型 HANDLE WINAPI CreateThread( _In_opt_ LPSECURITY_ATTRI ...

  10. 【转】centos中service命令与/etc/init.d的关系以及centos7的变化

    centos中service命令与/etc/init.d的关系 service httpd start 其实是启动了存放在/etc/init.d目录下的脚本. 但是centos7的服务管理改规则了.C ...