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 ...
随机推荐
- SWFUpload 2.5.0版 官方说明文档 中文翻译版
原文地址:http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html#setFileUploadLimit SWFUpload v2 ...
- 【干货理解】理解javascript中实现MVC的原理
理解javascript中的MVC MVC模式是软件工程中一种软件架构模式,一般把软件模式分为三部分,模型(Model)+视图(View)+控制器(Controller); 模型:模型用于封装与应用程 ...
- [译]git clone
git clone git clone命令copy一个已经存在的Git仓储. git clone有点像svn的checkout, 他的不同之处是这个copy也是一个完整的仓储-它有自己的历史纪录, 能 ...
- Ubuntu 14 Chrome字体设置备份
Ubuntu 14 Chrome字体设置备份 1.设置 -> 显示高级设置 -> 自定义字体 -> (1) 标准字体:YaHei Consolas Hybrid,14 (2) Ser ...
- Hibernate框架之入门案例
今天终于开始学习了三大框架的其中一个框架,Hibernate框架,在这里不去讲Hibernate框架的一些基础概念了,直接切入代码,带大家了解一下Hibernate能干什么, Hibernate的人们 ...
- 【转载】javaAgent 参数
-javaagent 这个JVM参数是JDK 5引进的. java -help的帮助里面写道: -javaagent:<jarpath>[=<options>] load Ja ...
- ubuntu14.04显卡驱动问题(amd5600k集显7650d)
安装ubuntu的时候,多次莫名其妙地黑屏,起初以为是最新得ubuntu14.04安装包不稳定,所以一直尝试了很多次. 重启-->安装-->黑屏(硬盘仍在转动,屏幕上什么都没有)--> ...
- Python进程、线程
Lock & RLock :用来确保多线程多共享资源的访问. Semaphore : 用来确保一定资源多线程访问时的上限,例如资源池. Event : 是最简单的线程间通信的方式,一个线程可以 ...
- svn下目录说明
Branch 目录 : 该SVN 的Branch目录下存放的是:跟工程项目相关的各个工程版本分支.该目录下面的版本分支可能会被修改合并.不是稳定的版本. Document 目录:该SVN 的Docum ...
- 9.3---魔术索引(CC150)
魔术索引1:此外下一次应该看看课本上的方法. public boolean findMagicIndex(int[] A, int n){ for(int i = 0; i < A.length ...