poj 3279(暴力)
题意:有一个n*m的格子,每个格子都有黑白两面(0表示白色,1表示黑色)。我们需要把所有的格子都反转成黑色,每反转一个格子,它上下左右的格子都会跟着反转。请求出用最小步数完成反转时每个格子反转的次数。有多个解时,输出字典序最小的一组。
思路就是先判断第一行,然后如果第一行确定了,那么第二行就必须确定了(如果第一行某个是黑色的,那么必定要在第二行给它翻过来),所以一直到底m-1行都是确定的,接下来只要判断第m行是否是全白就好了。直接枚举第一行就可以,代码是我参考大神的代码写的,里面的二进制枚举操作还是看了有一会儿才看懂
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
const int N = 20;
int gh[N][N];//初试的数组
int ch[N][N];//操作的数组
int vis[N][N];//记录翻过的牌子
int re[N][N];//
int ans[N][N];//记录答案
int fNum,aNum,n,m;
void solve( int i,int j ){
fNum++;//操作次数+1
vis[i][j] = 1;
ch[i][j] = 1 - ch[i][j];
ch[i-1][j] = 1 - ch[i-1][j];
ch[i][j-1] = 1 - ch[i][j-1];
ch[i+1][j] = 1 - ch[i+1][j];
ch[i][j+1] = 1 - ch[i][j+1];
}
void record(){
aNum = fNum;//最小次数记录一下
for( int i = 1; i <= m; i++ ){
for( int j = 1; j <= n; j++ ){
ans[i][j] = vis[i][j];
}
}
}
int main(){
cin >> m >> n;
for( int i = 1; i <= m; i++ ){
for( int j = 1; j <= n; j++ ){
cin >> gh[i][j];
}
}
aNum = 10010;
int t = 1 << n;
for( int loop = 0; loop < t; loop++ ){
for( int i = 1; i <= m; i++ ){
for( int j = 1; j <= n; j++ ){
ch[i][j] = gh[i][j];
}
}
memset(vis,0,sizeof(vis));
fNum = 0;//记录需要操作的数目
int moveN = loop;//这里是二进制,二进制
for( int i = 1; i <= n; i++ ){
if( moveN&1 ){//这里我看了很久才看明白
//假入一个数字的二进制是0101,意思就是
//第一格翻,第三格翻,上面t为2的N次方,包括了所有的
//可能性的二进制对应的数字
solve( 1,i );
}
moveN >>= 1;
}
for( int i = 2; i <= m; i++ ){
for( int j = 1; j <= n; j++ ){
if( ch[i-1][j] ){//如果上一行是黑色,就处理这一行
solve(i,j);
}
}
}
bool flag = true;
for( int j = 1; j <= m; j++ ){
if( ch[m][j] ){//直接判断最后一行是否满足
flag = false;
break;
}
}
if( flag and fNum < aNum ){
record();
}
}
if( aNum == 10010 ){
cout << "IMPOSSIBLE\n";
return 0;
}else{
for( int i = 1; i <= m; i++ ){
cout << ans[i][1];
for( int j = 2; j <= n; j++ ){
cout << " " << ans[i][j];
}
cout << endl;
}
}
}
poj 3279(暴力)的更多相关文章
- 【枚举】POJ 3279
直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变 ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
- POJ 2182/暴力/BIT/线段树
POJ 2182 暴力 /* 题意: 一个带有权值[1,n]的序列,给出每个数的前面比该数小的数的个数,当然比一个数前面比第一个数小的个数是0,省略不写,求真正的序列.(拗口) 首先想到的是从前到后暴 ...
- 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 - 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 ...
- POJ - 3279(枚举+暴力)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 14297 Accepted: 5257 Descrip ...
- POJ 3279 Filptile dfs
题目链接:http://poj.org/problem?id=3279 大意:给出一块n*m的棋盘.里面放满了棋子.有1和0两种状态.给出初始状态,翻动的时候会把当前位置和当前位置的上下左右共五个位置 ...
随机推荐
- 导出Excel实现 (ASP.NET C# 代码部分)
背景: 实现导出Excel功能. 技术: ASP.NET , 采用`Aspose.Cells`第三方组件, C# 实现通用部分. 根据前台Ext Grid完成导入Excel中文列与实际存储列的对应关 ...
- JAVA性能优化:35个小细节让你提升java代码的运行效率
代码优化,一个很重要的课题.可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是, ...
- 遇到问题或bug时要做的事。
1,做事细心,只有细心才能减少bug量,做总结. 2,开发中遇到bug和错误,第一要想到是程序代码的问题.而首先想到的不是其他问题(比如版本,框架或兼容问题等). 3,程序不能按照自己的意愿执行,时先 ...
- leetcode621
public class Solution { public int LeastInterval(char[] tasks, int n) { Dictionary<char, int> ...
- for 没有作用域的说话
for i in range(10): passprint(i) 打印的结果就是9 打印的最后一次结果
- 将LinkedHashMap转换为需要的对象
项目中,在获取json数据转换为list类型以后,本来以为可以直接使用,结果在使用中报错“java.lang.ClassCastException: java.util.LinkedHashMap c ...
- 数据库设计,表与表的关系,一对一。One-To-One(1)
如何处理对象间one-to-ont的映射关系:one-to-one: 处理一对一关联的方式有两种: 1.主键关联使用主键关联处理一对一的关系. 主键关联不需要额外的表字段:两行是通过这种一对一关系相关 ...
- 吴裕雄 python深度学习与实践(16)
import struct import numpy as np import matplotlib.pyplot as plt dateMat = np.ones((7,7)) kernel = n ...
- cacti的介绍、安装、配置、及维护
一.cacti的介绍 Cacti 在英文中的意思是仙人掌的意思,Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具.它通过snmpget来获取数据,使用 R ...
- jsp中<c:if>标签的用法
<c:if test="${(tbl.column1 eq '值') and (tbl.column2 eq 'str')}"> <table>...< ...