2018-2-7

这里要使用一种特殊的方法求解。。。

假如说我们的第一行已经确定了翻不翻转的状态,如果是一行两个那么就是00,01,10,11,按照这个对第一行操作过之后,那么第一行的状态只能由第二行决定了,若它i,j不符合条件,相应的第二行的i+1,j就要想办法改变它的状态,因为它只能由第一行来改变了,这样看来,我们只要枚举第一行的状态就可以了。

#include<iostream>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;const int MAX = 15;
bool x[MAX+2][MAX+2],y[MAX+2][MAX+2],f[MAX+2][MAX+2],w[MAX+2][MAX+2];
int m,n,cnt,now;void flip(int p,int q){y[p][q]=!y[p][q];y[p+1][q]=!y[p+1][q];y[p-1][q]=!y[p-1][q];y[p][q-1]=!y[p][q-1];y[p][q+1]=!y[p][q+1];
}void set(){ for (int i=1;i<=m;i++){for (int j=1;j<=n;j++){y[i][j]=x[i][j];f[i+1][j]=0;}}
}bool res(){for (int i=1;i<=m-1;i++){for (int j=1;j<=n;j++){if (y[i][j]){// cout<<i<<" "<<j<<endl;flip(i+1,j);f[i+1][j]=true;cnt++;}}}for (int j=1;j<=n;j++){if (y[m][j]) return false;}return true;
}void dfs(int step){if (step==n+1){cnt=0;for (int j=1;j<=n;j++){if (f[1][j]){flip(1,j);cnt++;}}if (res()){if (cnt<now){for (int i=1;i<=m;i++){for (int j=1;j<=n;j++){w[i][j]=f[i][j];}}now=cnt;}}set();return ;}f[1][step]=false;dfs(step+1);f[1][step]=true;dfs(step+1);
}int main(){while (cin>>m>>n){int sum=0;    for (int i=1;i<=m;i++){for (int j=1;j<=n;j++){cin>>x[i][j];if (!x[i][j]) sum++;}}if (sum==m*n){//不需要我们进行翻转了for (int i=1;i<=m;i++){for (int j=1;j<n;j++){cout<<0<<" ";}cout<<0<<endl;}continue;}now=inf;set();dfs(1);if (now==inf){cout<<"IMPOSSIBLE"<<endl;continue;}for (int i=1;i<=m;i++){for (int j=1;j<n;j++){cout<<w[i][j]<<" ";}cout<<w[i][n]<<endl;}}
}

poj3279 反转 挑战程序设计竞赛相关推荐

  1. poj3276 反转 挑战程序设计竞赛

    2018-2-8 翻转奇数次与翻转一次的效果是一样的, 翻转偶数次与不翻转的效果是一样的. 假设我们已知k的大小了,那么我们至少需要多少次操作呢?对于第一个奶牛来说,如果它的方向不正确,它只能由以第一 ...

  2. 《挑战程序设计竞赛》之“反转”问题总结

    <挑战程序设计竞赛>之"反转"问题总结 萌新又来写总结了 "反转"问题在<挑战程序设计竞赛>P150左右的位置~ 拒!绝!搜!索! 这类 ...

  3. 《挑战程序设计竞赛(第2版)》习题册攻略

    本项目来源于GitHub 链接: 项目GitHub链接 1 前言 项目为<挑战程序设计竞赛(第2版)>习题册攻略,已完结.可配合书籍或笔记,系统学习算法. 题量:约200道,代码注释内含详 ...

  4. 挑战程序设计竞赛(第2版)》

    <挑战程序设计竞赛(第2版)> 基本信息 作者: (日)秋叶拓哉 岩田阳一 北川宜稔 译者: 巫泽俊 庄俊元 李津羽 丛书名: 图灵程序设计丛书 出版社:人民邮电出版社 ISBN:9787 ...

  5. 挑战程序设计竞赛:反转法

    挑战程序设计竞赛:反转法 1. 题目介绍 1.1 题目 1.2 样例 2. 思路讲解 2.1 视频讲解 2.1 反转法(开关问题) 3. 练习题 4. 附录:程序代码 4.1 Java 4.2 C++ ...

  6. POJ 1150 The Last Non-zero Digit 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 1150 The Last Non-zero Digit超大组合数:求超大组合数P(n, m)的最后一个非零位.4.1更加复杂 ...

  7. POJ 3735 Training little cats​ 题解 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3735 Training little cats调教猫咪:有n只饥渴的猫咪,现有一组羞耻Play,由k个操作组成,全部选自: ...

  8. POJ 3608 Bridge Across Islands 《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    POJ 3608 Bridge Across Islands跨岛大桥:在两个凸包小岛之间造桥,求最小距离?3.6与平面和空间打交道的计 ...

  9. AOJ 1312 Where's Wally 题解《挑战程序设计竞赛》

    为什么80%的码农都做不了架构师?>>>    本文由码农场 同步,最新版本请查看原文:http://www.hankcs.com/program/algorithm/aoj-131 ...

最新文章

  1. 一句话总结等距映射(流形学习)
  2. mysql自定义序号_MySQL数据库之在mysql中给查询的结果添加序号列
  3. Oracle就业课第六课之游标和触发器
  4. 在电脑桌面 右键点击 计算机,在桌面上右键点击电脑
  5. 关于算法模板和规范的说明
  6. jboss mysql cluster_jboss配置mysql数据库连接池
  7. 修改Typora的快捷键【markdown软件】
  8. [ZJOI2008]骑士
  9. Vue学习笔记之11-slot插槽
  10. springAop切面失效的问题解决
  11. APP隐私合规检测工具Camille环境搭建
  12. 达梦8初始化参数之BLANK_PAD_MODE
  13. 以太网性能测试仪-Y.1564测试
  14. ISE UCF 写法
  15. 实战 | 一键导出微信阅读记录和笔记
  16. ICSE (2022). Nessie的阅读记录
  17. 时间序列信号处理(四)——傅里叶变换和短时傅里叶变换python实现
  18. Win10系统VS2022开发环境中(X86)Win32汇编(MASM32)环境配置和一些示例源码及解释
  19. 紫光华宇拼音输入法 V6.1 正式版
  20. 自考基础会计学可以带计算机吗,自考《基础会计学》怎么过?

热门文章

  1. 安装wordpress之激活mod_rewrite
  2. sap sdi mysql_SAP HANA 实时数据模型与导入数据模型之间基于 SDI 的混合
  3. 第十届蓝桥杯大赛青少年创意编程C++组省赛 第2题 小猫吃鱼
  4. python中深拷贝和浅拷贝_**Python中的深拷贝和浅拷贝详解
  5. 自定义notebook扩展插件_Anaconda3中的Jupyter notebook添加扩展插件
  6. 稳压电源的设计与制作_电子爱好设计的直流可调压电源电路,太完美了,有图,亲测可用...
  7. Spring Boot笔记-logback-spring.xml获取application.properties中的变量
  8. Qt与java web通过数据库实现数据展示同步
  9. archbang linux安装教程,ArchLinux系统安装教程
  10. php符号 set,PHP 符号大全