Enum:Fliptile(POJ 3279)

题目大意:农夫想要测牛的智商,于是他把牛带到一个黑白格子的地,专门来踩格子看他们能不能把格子踩称全白
这一题其实就是一个枚举题,只是我们只用枚举第一行就可以了,因为这一题有点像开关一样,一个翻了,另一个就要跟着一起翻,第一行会影响下面所有行,而且影响情况只有一种,所以枚举完了以后我们不断模拟就可以了
#include <iostream>
#include <functional>
#include <algorithm> using namespace std; static int map[][], flip[][], ans_map[][], M, N;
static int dirx[] = { -, , , };
static int diry[] = { , -, , }; int solve(void);
int get_color(const int, const int); int main(void)//开关问题,枚举第一行即可得到下面几行的关系
{
int ans, tmp;
while (~scanf("%d%d", &N, &M))//读图
{
for (int i = ; i < N; i++)
for (int j = ; j < M; j++)
scanf("%d", &map[i][j]);
ans = INT_MAX;
for (int i = ; i < << M; i++)//枚举第一行
{
memset(flip, , sizeof(flip));
for (int j = ; j < M; j++)//枚举结果填入第一行
if (( << j & i) != )
flip[][M - j - ] = ;
tmp = solve();
if (tmp >= && tmp < ans)
{
ans = tmp;
memcpy(ans_map, flip, sizeof(flip));
}
} if (ans == INT_MAX)
printf("IMPOSSIBLE\n");
else
{
for (int i = ; i < N; i++)
{
for (int j = ; j < M; j++)
printf("%d ",ans_map[i][j]);
printf("\n");
}
}
}
return ;
} int solve(void)
{
int ans = ;
for (int i = ; i < N; i++)//从第二行开始一行一行模拟
for (int j = ; j < M; j++)
if (get_color(j, i - ) == )//记住是上一行翻的牌子
flip[i][j] = ;//说明需要翻 for (int j = ; j < M; j++)//得到最后一行的所有格子的颜色,如果还有黑色,则说明这一步无法把格子全部翻转成白色
if (get_color(j, N - ) == )
return -; for (int i = ; i < N; i++)//统计步数
for (int j = ; j < M; j++)
if (flip[i][j])
ans++;
return ans;
} int get_color(const int x, const int y)
{
//得到(x,y)位置的颜色
int ny, nx, sum = map[y][x]; for (int i = ; i < ; i++)
{
nx = x + dirx[i]; ny = y + diry[i];
if (( <= nx&&nx < M) && ( <= ny&&ny < N))
sum += flip[ny][nx];
}
return sum % ;
}

Enum:Fliptile(POJ 3279)的更多相关文章
- Fliptile POJ - 3279 (开关问题)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16483 Accepted: 6017 Descrip ...
- Fliptile(POJ 3279)
原题如下: Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16494 Accepted: 6025 D ...
- kuangbin专题 专题一 简单搜索 Fliptile POJ - 3279
题目链接:https://vjudge.net/problem/POJ-3279 题意:格子有两面,1表示黑色格子,0表示白色格子,奶牛每次可以踩一个格子,踩到的格子和它周围的上下左右格子都会翻面,也 ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
- POJ 3279 Fliptile(翻格子)
POJ 3279 Fliptile(翻格子) Time Limit: 2000MS Memory Limit: 65536K Description - 题目描述 Farmer John kno ...
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
- 状态压缩+枚举 POJ 3279 Fliptile
题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...
- 【枚举】POJ 3279
直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变 ...
- poj 3279 Fliptile (简单搜索)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 16558 Accepted: 6056 Descrip ...
随机推荐
- php 冒泡排序
public function demo($arr){ $len = count($arr); if ($len == 1) { return $arr; } else { for ($i = 1; ...
- java常用类 --- Object
Object类 Object类是所有Java类的父类,其位于java.lang包中.任何Java对象,如果没有显示定义父类则它默认Object类作为父类. 方法如下: 其中与线程相关的有5个方法: n ...
- [整理]iis7.5下部署MVC5
IIS7.5下部署MVC5 测试环境服务器部署 windows server 2008 r2 1.安装iis 7.5 2.安装 .net framework4.5.1并注册 cd C:\Windows ...
- .NET中的工作目录一览!
定义: 当前工作目录——进行某项操作的目的目录,会随着OpenFileDialog.SaveFileDialog等对象所确定的目录而改变. 当前执行目录——该进程从中启动的目录,即文件自身 ...
- 此请求的查询字符串的长度超过配置的 maxQueryStringLength 值 --不仅wen.fonfig一个地方需要设置
提示已经很明确了... 搜出来的都是: <system.webServer> <security> <requestFiltering> <requestLi ...
- iPad 多任务 Spilt View & Size Class
iPad 多任务 Spilt View & Size Class 一.多任务简介 iOS 9 以后iPad新增了多任务的支持,主要形式有三种: Slide Over (侧边快捷打开) Spil ...
- 2013成都Regional:一块木板,几个气球
先来看木板: 再来看气球: 最后看木板+气球: google送的纪念品.... 到现在还没敢打乱: 赛场外面.... 赛场里面: 和比赛时出了问题,并现场换了一台的电脑(对面长安大学1队)... 最 ...
- ajax验证登录注册
<form id="form1" onsubmit="return false;"> <table id="login-table& ...
- Oracle 数据库1046事件
例子: session 2: SQL> connect test/test Connected. select * from v$mystat where rownum=1; 143 selec ...
- [BZOJ1691][Usaco2007 Dec]挑剔的美食家
[BZOJ1691][Usaco2007 Dec]挑剔的美食家 试题描述 与很多奶牛一样,Farmer John那群养尊处优的奶牛们对食物越来越挑剔,随便拿堆草就能打发她们午饭的日子自然是一去不返了. ...