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清除无用数据行和数据列
http://jingyan.baidu.com/article/6525d4b13ae608ac7c2e9478.html ctrl+shift+↓ ctrl+- ctrl+shift+→ ctrl ...
- [sharepoint]修改Item或者File的Author和Editor
写在前面 最近项目中调用sharepoint rest api方式获取文件或者Item列表,而用的方式是通过证书请求,在上传文件,或者新建item的时候,默认的用户是在sharepoint端注册的用户 ...
- centos6.5 yum安装redis
1.yum添加epel源 yum install epel-release 2.安装yum yum install redis 3.Redis 服务端配置——Could not connect to ...
- MYSQL5.7实时同步数据到TiDB
操作系统:CentOS7 mysql版本:5.7 TiDB版本:2.0.0 同步方法:使用TiDB提供的工具集进行同步 说明: 单机mysql同步时,可以直接使用binlog同步, 但mysql集群进 ...
- autolayout后获取frame
autolayout设置完layout立即用frame拿对应的值可能拿不准,因为autolayout设置完布局后布局引擎并不会马上去更改布局,而是将布局标记为待更新,此时可以用的方法有两种,一是延时0 ...
- Week__8
Monday_ 今晚补了扔鸡蛋问题的动态规划问题,补了这道题,感觉视野又开阔了些. 写了一道思维题cf 1066A 数字逻辑后半节听得打脑壳,现在很晚了,明天再看叭. Tuesday_ 今晚补了 ad ...
- Java线程池ThreadPoolExecutor
线程池的好处 1. 降低资源的消耗 通过重复利用已创建的线程降低线程创建和销毁所造成的消耗 2. 提高响应速度 当任务到达时,任务可以不需要等到线程创建就能立即执行 3. 提高线程的可管理型 线程是稀 ...
- 搭建EOS环境
[搭建EOS环境] 1.Ubuntu 18.04 下安装eosio wget https://github.com/eosio/eos/releases/download/v1.4.4/eosio_1 ...
- DJango 基础 (1)
django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...
- mongodb-MYSQL
#encoding:utf8 import pymongoimport MySQLdbimport randomdef GetMongoData(): MyQuery = Mongo_Tab.find ...