直达–>POJ 3279 Fliptile

题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变成0,要输出踩砖块位置。

思路:也不知道为什么归类在搜索里,问了大牛,枚举第一行的情况(1<

#include <cstdio>
#include <cstring>
using namespace std;
int N,M;
int maps[100][100];
int dx[]={1,-1,0,0,0};
int dy[]={0,0,-1,1,0};
int ans[100][100];
int flips[100][100];
int r; int color(int x,int y){ //判断当前砖块是什么颜色
int c = maps[x][y];
for(int i=0;i<5;i++){
int x1 = x+dx[i];
int y1 = y+dy[i];
if(x1<M&&y1<N&&x1>=0&&y1>=0)
c+=flips[x1][y1];
}
return c%2;
}
int canl(){
int res = 0;
for(int i=1;i<M;i++){
for(int j=0;j<N;j++){
if(color(i-1,j)){//如果上一个前为1 则翻动此块
flips[i][j] = 1;
}
}
}
for(int i=0; i<N; i++){//判断最后一行为不为全0
if(color(M-1,i)){
return -1;
}
}
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
res+=flips[i][j];
}
}
return res;
}
void solve(){
for(int i=0;i<(1<<N);i++){ //枚举第一行所有情况
memset(flips,0,sizeof(flips)); for(int j=0;j<N;j++){
flips[0][N-j-1] = i>>j&1;
}
int num = canl();
if(num >=0 && (r<0||num<r)){
r = num;
memcpy(ans,flips,sizeof(flips)); //求出最优解存入ans数组
}
}
if(r==-1)
printf("IMPOSSIBLE\n");
else{
for(int i=0; i<M; i++){
for(int j=0; j<N-1; j++){
printf("%d ",ans[i][j]);
}
printf("%d\n",ans[i][N-1]);
}
}
}
void init()
{
memset(maps,0,sizeof(maps));
memset(ans,0,sizeof(ans));
}
int main()
{
while(~scanf("%d%d",&M,&N)){
r = -1;
init();
for(int i=0;i<M;i++){
for(int j=0;j<N;j++){
scanf("%d",&maps[i][j]);
}
}
solve();
}
return 0;
}

【枚举】POJ 3279的更多相关文章

  1. 状态压缩+枚举 POJ 3279 Fliptile

    题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...

  2. POJ.3279 Fliptile (搜索+二进制枚举+开关问题)

    POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...

  3. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  4. POJ 3279 Fliptile(翻格子)

    POJ 3279 Fliptile(翻格子) Time Limit: 2000MS    Memory Limit: 65536K Description - 题目描述 Farmer John kno ...

  5. POJ 3279 - Fliptile - [状压+暴力枚举]

    题目链接:http://poj.org/problem?id=3279 Sample Input 4 4 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 Sample Output 0 ...

  6. POJ - 3279 Fliptile (枚举)

    http://poj.org/problem?id=3279 题意 一个m*n的01矩阵,每次翻转(x,y),那么它上下左右以及本身就会0变1,1变0,问把矩阵变成全0的,最小需要点击多少步,并输出最 ...

  7. (简单) POJ 3279 Fliptile,集合枚举。

    Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more ...

  8. POJ 3279 枚举(思维)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10931   Accepted: 4029 Descrip ...

  9. POJ - 3279 枚举 [kuangbin带你飞]专题一

    这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...

随机推荐

  1. JavaScript 日期选择器 Pikaday

    找一些插件的过程实在太痛苦了...好容易找到一个,赶紧记录下.免得以后重复浪费时间在这上面. 插件名:Pikaday github地址:https://github.com/dbushell/Pika ...

  2. bzoj4692: Beautiful Spacing

    先二分答案后dp 设\(su[n]\)为\(\sum_{1}^{n}xi[i]\) 设\(f[n]\)为1时表示第n个单次能做某一行的结尾,且之前的空格满足二分出来的答案. 考虑怎样的\(f[i]\) ...

  3. centos 6.7 搭建tornado + nginx + supervisor的方法(已经实践)

    首先,本来不想写这篇博客了,但是我测试了很多网上的例子包括简书的,全不行,我总结原因是自己太笨,搞了俩个晚上,后来决定,自己还是写一篇记录下来,保证自己以后使用 环境: centos6.7 64 py ...

  4. SecureCRT 常用命令

    常用命令:一.ls 只列出文件名 (相当于dir,dir也可以使用) -A:列出所有文件,包含隐藏文件. -l:列表形式,包含文件的绝大部分属性. -R:递归显示. --help:此命令的帮助. 二. ...

  5. css3中变形函数(同样是对元素来说的)和元素通过改变自身属性达到动画效果

    /*对元素进行改变(移动.变形.伸缩.扭曲)*/ .wrapper{ margin:100px 100px auto auto; width:300px; height:200px; border:2 ...

  6. 面向过程(POP)、面向对象(OOP)、面向接口(IOP)、面向切面(AOP)

    面向过程:典型的是C/C++的结构体,结构体里只有变量,没有处理变量的方法,需要专门编写处理变量的方法. 面向对象:ArrayList<Integer> list=new ArrayLis ...

  7. MFC 滑动条的重绘

    MFC自带的滑动条的样子是这样的. 比较难看,所以需要重绘下,重绘后的样子是这样的. 代码如下: CustomSliderCtr.h #pragma once // CCustomSliderCtr ...

  8. AngularJS2

    //package.json 用来标记本项目所需的npm依赖包{ "name": "angular-quickstart", "version&quo ...

  9. ubuntu中恢复rm命令误删文件

    步骤: 1.对于文件系统为ext3文件系统 使用命令:sudo apt-get install ext3grep. 对于文件系统为ext4文件系统 使用sudo apt-get install ext ...

  10. Lattice FIFO 使用之FIFO_DC输入输出宽度不同时 的一个注意事项

    在使用FIFO_DC的时候,我们知道这个FIFO的一个功能是可以输入输出的数据宽度不一样,比如: 输入数据为128bit,输出数据为16bit,FIFO内部可以实现这样的转换,但是输出的时候是先送出一 ...