直达–>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. centos 7 配置网络

    文档: https://wiki.centos.org/FAQ/CentOS7

  2. DIV+CSS布局

    宽度自适应两列布局 <!DOCTYPE html> <html> <head> <meta charset="gbk"> <t ...

  3. Git 常用命令详解

    Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如:linux kernel),管理私人的文档和源代码也有很多优势(如:wsi-lgame-pro) Git 的更多介绍 ...

  4. AngularJS2

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

  5. 微信JS SDK配置授权,实现分享接口

    微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...

  6. Android学习资源整理

    官方文档:https://developer.android.com/guide/index.html (万万没想到居然有中文) 网友整理的学习笔记,挺不错的 http://www.runoob.co ...

  7. UWP Composition API - PullToRefresh

    背景: 之前用ScrollViewer 来做过 PullToRefresh的控件,在项目一些特殊的条件下总有一些问题,比如ScrollViewer不会及时到达指定位置.于是便有了使用Compositi ...

  8. svn: how to set the executable bit on a file?

    http://stackoverflow.com/questions/17846551/svn-how-to-set-the-executable-bit-on-a-file svn uses pro ...

  9. racket

    let 和 let* 区别 ``` racket // 这是对的 (let* ([x (random 4)][o (random 4)] [diff (number->string (abs ( ...

  10. HBase JavaAPI操作示例

    package testHBase; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBase ...