POJ3279 Fliptile(暴力)
有一种暴力是这样的,枚举一边,确定另一边。
这一题是这么解的,枚举第一行所有翻转情况,然后剩下几行其实是确定的,因为前i行翻转方式确定后只能通过第i+1行的翻转来改变第i行的状态,于是依次模拟求出剩下几行的翻转情况。
另外其实每个点最多只会被翻转一次,因为如果翻转两次和不翻转是一样的。
这题很有意思。
#include<cstdio>
#include<cstring>
using namespace std; int n,m,sta[][],op[][]; void flip(int x,int y){
int dx[]={,,,-};
int dy[]={,-,,}; sta[x][y]^=;
for(int i=; i<; ++i){
int nx=x+dx[i],ny=y+dy[i];
if(nx< || nx>=n || ny< || ny>=m) continue;
sta[nx][ny]^=;
}
}
bool isOK(){
for(int i=; i<n; ++i){
for(int j=; j<m; ++j) if(sta[i][j]) return ;
}
return ;
}
int doit(){
int cnt=;
for(int i=; i<n-; ++i){
for(int j=; j<m; ++j){
if(sta[i][j]){
flip(i+,j);
op[i+][j]=;
++cnt;
}
}
}
if(isOK()) return cnt;
else return ;
}
int main(){
int init[][],ans[][];
scanf("%d%d",&n,&m);
for(int i=; i<n; ++i){
for(int j=; j<m; ++j) scanf("%d",&init[i][j]);
}
int res=;
for(int i=; i<(<<m); ++i){
memcpy(sta,init,sizeof(init));
memset(op,,sizeof(op));
int cnt=;
for(int j=; j<m; ++j){
if((i>>j)&){
flip(,m-j-);
op[][m-j-]=;
++cnt;
}
}
cnt+=doit();
if(res>cnt){
res=cnt;
memcpy(ans,op,sizeof(op));
}
}
if(res==) puts("IMPOSSIBLE");
else{
for(int i=; i<n; ++i){
for(int j=; j<m; ++j){
printf("%d ",ans[i][j]);
}
putchar('\n');
}
}
return ;
}
POJ3279 Fliptile(暴力)的更多相关文章
- POJ-3279.Fliptile(二进制状态压缩 + dfs) 子集生成
昨天晚上12点刷到的这个题,一开始一位是BFS,但是一直没有思路.后来推了一下发现只需要依次枚举第一行的所有翻转状态然后再对每个情况的其它田地翻转进行暴力dfs就可以,但是由于二进制压缩学的不是很透, ...
- POJ3279 Fliptile —— 状态压缩 + 模拟
题目链接:http://poj.org/problem?id=3279 Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submiss ...
- [POJ3279]Fliptile(开关问题,枚举)
题目链接:http://poj.org/problem?id=3279 题解:http://www.cnblogs.com/helenawang/p/5538547.html /* ━━━━━┒ギリギ ...
- POJ3279 Fliptile 枚举+简单搜索
题意:一个矩阵,每个点1或0,然后每次翻一个点,它周围上下左右(包括自己)1->0,0->1,问最少翻几次可以矩阵全是0,忽略题目说的字典序 分析:枚举第一行所有的情况,然后下面几行也随之 ...
- poj3279 Fliptile
思路: 枚举. 枚举了第一行的操作之后,下面每行的操作也随之确定了.因为在确定了第i行的操作之后,要想再改变a[i][j]的状态只能通过改变a[i + 1][j]来实现.另外,用到了集合的整数表示方法 ...
- Fliptile POJ-3279 DFS
题目链接:Fliptile 题目大意 有一个01矩阵,每一次翻转(0->1或者1->0)一个元素,就会把与他相邻的四个元素也一起翻转.求翻转哪些元素能用最少的步骤,把矩阵变成0矩阵. 思路 ...
- Fliptile [POJ3279] [开关问题]
题意 给定一张n*m的方格图,有1,0两种数字,每次可以选取一个十字进行翻转,1变成0,0变成1,问最少需要翻转几次,使它全部变成0,全部如果有重复的,按字典序最小的进行输出: 输入 第一行n,m 下 ...
- (POJ-3279)Fliptile (dfs经典---也可以枚举)
Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...
- 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 ...
随机推荐
- c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出
c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...
- 面试题目——《CC150》链表
面试题2.1:编写代码,移除未排序链表中的重复结点 进阶:如果不得使用临时缓冲区,该怎么解决? package cc150; import java.util.HashMap; import java ...
- Mono-D在MacOS上的设置
1. 下载DMD 建议下载tar.xz压缩包,不建议下载dmg安装包,因为dmg中没有src,而后面需要用src中的内容设置代Code Completion. 地址:http://dlang.org/ ...
- Sql Server 分区演练 【转】
Sql Server 分区演练 [转] 代码加注释,希望对初学者有用. USE [master]GOif exists (select * from sys.databases where name ...
- App-Pass the password
V1.0 初始版本 注册一个帐号却不想使用简单密码? Pass the Password! 输入任意字符串,如反写或截取网站域名,我们帮你生成高安全性密码. 记住规则,忘记密码 . 下一次依照你的规则 ...
- FindWindowEx用法
函数原型:HWND FindWindowEx(HWND hwndParent,HWND hwndChildAfter,LPCTSTR lpszClass,LPCTSTR lpszWindow): 参数 ...
- [Algorithm] 字符串匹配算法——KMP算法
1 字符串匹配 字符串匹配是计算机的基本任务之一. 字符串匹配是什么?举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串& ...
- 【bzoj3531】 [SDOI2014]旅行
题目描述 S国有N个城市,编号从1到N.城市间用N-1条双向道路连接,满足从一个城市出发可以到达其它所有城市.每个城市信仰不同的宗教,如飞天面条神教.隐形独角兽教.绝地教都是常见的信仰.为了方便,我们 ...
- HTML页面去缓存
在页面中写入: 两种写法: 1. <META HTTP-EQUIV="nocache" CONTENT="no-cache"> 2. <HEA ...
- liunx学习(一):linux下目录操作大全
Linux C函数之文件及目录函数(全):http://blog.sina.com.cn/s/blog_695e489c01013ldd.html linux目录操作发:http://www.cnbl ...