直达–>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. [BZOJ3223]Tyvj 1729 文艺平衡树

    [BZOJ3223]Tyvj 1729 文艺平衡树 试题描述 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区 ...

  2. ip地址转换

    通常,我们用点分十进制字符串表示ipv4地址(192.168.1.1),用十六进制字符串表示ipv6地址(fe80::20c:29ff:fee9:4bcc). ipv4转换函数 #include &l ...

  3. shell 脚本中的运算

    #!/bin/bash read -p "please Insert two integer values: " a b if [ ! -n "$a" -o ! ...

  4. redis lua

    需求是在缓存最近一周内用户所有消息列表,考虑用Redis 存储:为每个存储一个独立Sorted Set,value 为消息体,Score 为MessageId,用以实现增量消息同步. 问题就来了:So ...

  5. cocos2d-x for android配置 & 运行 Sample on Linux OS

    1.从http://www.cocos2d-x.org/download下载稳定版 比如cocos2d-x-2.2 2.解压cocos2d-x-2.2.zip,比如本文将其解压到 /opt 目录下 3 ...

  6. Selenium使用

    定位 1.普通 by id, name,class_name,link_text 2.加强 xpath css

  7. sh5.while 脚本练习

    脚本编程: 顺序结构 选择结构 if, case 循环结构 for,while,until while循环:适用于循环次数未知的场景 语法: while CONDITION;do statement ...

  8. HTML 5 背离贪吃蛇 写成了类似于屏幕校准

    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...

  9. tomcat 远程调试

    1.服务端查看cataline.sh 中的描述  cataline jpda start 开启服务端远程调试 远程调试端口JPDA_ADDRESS="8000" 2.本地代码参考  ...

  10. iOS 字符串删除 DOM

    iOS  string 删除 包含的 DOM NSMutableString *mutableString = [NSMutableString stringWithString:responseSt ...