POJ 3279 枚举?
思路:
1.枚举第一行 递推剩下的
判断最后一行成不成立
2. (误)高斯消元? 如何判断1最少和字典序最小… (所以这种做法好像不可取)
//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,m,a[16][16],temp[16][16],vis[16][16],xx[]={0,0,0,1,-1},yy[]={0,1,-1,0,0},ans[16][16],tmp=0x3fffff;
bool check(int x,int y){return x<n&&x>=0&&y<m&&y>=0;}
int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
scanf("%d",&a[i][j]);
}
}
for(int ii=0;ii<(1<<m);ii++){
int cnt=0;
memset(vis,0,sizeof(vis));
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
temp[i][j]=a[i][j];
}
}
for(int j=0;j<m;j++){
if(ii&(1<<j)){
cnt++;vis[0][j]=1;
for(int k=0;k<=3;k++){
if(check(xx[k],j+yy[k]))temp[xx[k]][j+yy[k]]=!temp[xx[k]][j+yy[k]];
}
}
}
for(int i=1;i<n;i++){
for(int j=0;j<m;j++){
if(temp[i-1][j]){
vis[i][j]=1;cnt++;
for(int l=0;l<=4;l++){
if(check(i+xx[l],j+yy[l])){
temp[i+xx[l]][j+yy[l]]=!temp[i+xx[l]][j+yy[l]];
}
}
}
}
}
for(int k=0;k<m;k++){
if(temp[n-1][k])break;
if(k==m-1&&tmp>cnt){
tmp=cnt;
for(int j=0;j<n;j++){
for(int l=0;l<m;l++){
ans[j][l]=vis[j][l];
}
}
}
}
}
if(tmp>333){printf("IMPOSSIBLE");return 0;}
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
printf("%d ",ans[i][j]);
}
puts("");
}
}
POJ 3279 枚举?的更多相关文章
- POJ 3279 枚举(思维)
Fliptile Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10931 Accepted: 4029 Descrip ...
- POJ - 3279 枚举 [kuangbin带你飞]专题一
这题很经典啊,以前也遇到过类似的题--计蒜客 硬币翻转. 不过这题不仅要求翻转次数最少,且翻转方案的字典序也要最小. 解法:二进制枚举第一行的翻转方案,然后处理第二行,如果第二行的k列的上一列是黑色, ...
- POJ - 1222 / POJ - 3279 枚举第一行
说好的高斯消元法呢,暴搜都能0ms 这种翻转就是枚举第一行控制变量下面行就全都确定了 代码参考挑战程序设计例题 #include<iostream> #include<algorit ...
- 【枚举】POJ 3279
直达–>POJ 3279 Fliptile 题意:poj的奶牛又开始作孽了,这回他一跺脚就会让上下左右的砖块翻转(1->0 || 0->1),问你最少踩哪些砖块才能让初始的砖块全部变 ...
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
- 状态压缩+枚举 POJ 3279 Fliptile
题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...
- POJ 3279(Fliptile)题解
以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...
- POJ 3279 Fliptile(翻格子)
POJ 3279 Fliptile(翻格子) Time Limit: 2000MS Memory Limit: 65536K Description - 题目描述 Farmer John kno ...
- 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 ...
随机推荐
- STM32系列ARM单片机介绍
STM32系列基于专为要求高性能.低成本.低功耗的嵌入式应用专门设计的ARM Cortex-M3内核.按性能分成两个不同的系列:STM32F103"增强型"系列和STM32F101 ...
- Spring整合Shiro从源代码探究机制
首先从例如以下配置開始说起 ShiroDbFilterFactoryBean继承了ShiroFilterFactoryBean这个由jar提供的bean类, 而且它实现了InitializingBea ...
- PHP中用下标符号[]去读取字符串的逻辑
PHP中 [(下标)] 符号不仅能够应用于数组和对象,还能够应用于字符串,假设不注意非常easy出错. 比方获取一个网络接口,正常情况下会返回一个数组结构的json,经过解析之后结果为: array( ...
- zzuoj--10400--海岛争霸(并查集)
10400: B.海岛争霸 Time Limit: 2 Sec Memory Limit: 128 MB Submit: 128 Solved: 46 [Submit][Status][Web B ...
- POJ 1064 Cable master (二分答案,G++不过,C++就过了)
题目: 这题有点坑,G++过不了,C++能过. 条件:n个数据a[],分成k段,结果精度要求两位小数. 问题:每段最长为多少? 思路:因为精度要求为两位小数,我先把所有的长度a[]*100. 我们对答 ...
- windows2008 虚拟机64位的操作系统安装32位的应用程序
64位的操作系统安装32位的应用程序: 安装成功但是使用有问题 报错: 最终解决: 在一台物理机的win7上面安装该软件. 然后把安装好的文件全部拷贝到win2008虚拟机上面 启动,使用 多ok了! ...
- sublime text3前端常用插件
安装Package Control 在安装插件之前,需要让sublime安装Package Control.打开Sublime Text的控制台,快捷键ctrl + ~,在控制台中输入以下代码. im ...
- ActiveMQ学习笔记(4)----JMS的API结构和开发步骤
1. JMS的API结构 其实上图中的五个API在第一节中我们都已经使用到了.本节将会讲非持久化和持久化topic的使用. 2. JMS的基本开发步骤 1. 创建一个JMS工厂, Connectio ...
- 路飞学城Python-Day18
[1.编程范式] 1.面向过程编程 2.面向对象编程 [2.面向过程编程] 面向过程:核心就是过程 什么是过程? 过程指的是解决问题的步骤,先做什么,在作什么,面向过程就像是设计一个流水线,是一种 ...
- 百度蜘蛛IP地址到底代表什么含义?
百度蜘蛛IP地址到底代表什么含义,是不是不同的ip地址所代表的含义不一样呢?对权重和抓取是否有影响?哪些是无效的蜘蛛,哪些是站长工具的蜘蛛,那些又是百度自己真正的蜘蛛?百度蜘蛛,是百度搜索引擎的一个自 ...