直达–>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. OpenCV中IplImage图像格式与BYTE图像数据的转换

    最近在将Karlsruhe Institute of Technology的Andreas Geiger发表在ACCV2010上的Efficent Large-Scale Stereo Matchin ...

  2. Bootstrap 中的 Typeahead 组件 -- AutoComplete

    Bootstrap 中的 Typeahead 组件就是通常所说的自动完成 AutoComplete,功能很强大,但是,使用上并不太方便.这里我们将介绍一下这个组件的使用. 第一,简单使用 首先,最简单 ...

  3. 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)

    软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...

  4. 移居 GitHub

    博客很久没能更新了,很多代码也从博客园逐渐转移到 GitHub,欢迎新老用户光顾: https://github.com/kedebug 个人博客:http://kedebug.me/

  5. Mosquitto搭建Android推送服务(一)MQTT简介

    总体概要: MQTT系列文章分为4部分 1.MQTT简介 2.mosquitto服务器搭建 3.编写Mosquitto的可视化工具 4.使用Mosquitto完成Android推送服务 文章钢要: 对 ...

  6. 将做好的py文件打包成模块,供别人安装调用

    现在要将写完的3个py文件,打包. 步骤: 1.新建一个文件夹setup(名字随便取),在setup文件夹下,再新建一个文件夹financeapi. 2.将上面4个py文件拷贝至financeapi文 ...

  7. web socket (记录下来方便观看)

    Web Sockets HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力. 浏览器通过 JavaScript ...

  8. 【Java EE 学习 78 下】【数据采集系统第十天】【数据采集系统完成】

    一.项目源代码地址 二.项目演示

  9. Android-Spinner [使用C# And Java实现]

    效果如下: C#实现代码 using Android.App; using Android.OS; using Android.Widget; namespace SpinnerDemo { [Act ...

  10. jq插件制作(力推)

    http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html http://www.frontopen.com/1710.html