http://poj.org/problem?id=3279

在n*N的矩阵上,0代表白色,1代表黑色,每次选取一个点可以其颜色换过来,即白色变成黑色,黑色变成白色,而且其上下左右的点颜色也要交换,求最少交换多少点能把全部换成颜色0

输出所需要换的点,用1表示,如果有多种方案,输出字典序足最小的方案

但是这题的数据里没有字典序的情况,所以没有比较字典序也可以过,我一开始就不知道这个怎么按字典序排

用二进制枚举第一行翻转的所有的情况,然后第一行的翻转确定了再一行行的往下枚举点坑,找出全为0的情况。

第一行的情况确定了,下面的就确定了

  1. #include<cstdio>
  2. #include<cstring>
  3. using namespace std;
  4. int dx[]={,-,,,};
  5. int dy[]={,,-,,};
  6. int a[][],b[][],c[][];
  7. int n,m;
  8. int sreach(int x)
  9. {
  10. for (int i=;i<=m;i++){
  11. if (x&(<<(i-))){
  12. c[][i]=;
  13. for (int j=;j<;j++)
  14. b[+dx[j]][i+dy[j]]^=;
  15. }
  16. }
  17. for (int i=;i<=n;i++){
  18. for (int j=;j<=m;j++){
  19. if (b[i-][j]==){
  20. c[i][j]=;
  21. for (int k=;k<;k++){
  22. b[i+dx[k]][j+dy[k]]^=;
  23. }
  24. }
  25. }
  26. }
  27. for (int i=;i<=m;i++)
  28. if (b[n][i]) return ;
  29. return ;
  30. }
  31. int main()
  32. {
  33. int i,j;
  34. while (~scanf("%d %d",&n,&m))
  35. {
  36. int flag=;
  37. for (i=;i<=n;i++){
  38. for (j=;j<=m;j++)
  39. scanf("%d",&a[i][j]);
  40. }
  41. for (i=;i<(<<m);i++)
  42. {
  43. memcpy(b,a,sizeof(a));
  44. memset(c,,sizeof(c));
  45. if (sreach(i))
  46. {
  47. flag=;
  48. break;
  49. }
  50. }
  51. if (!flag) printf("IMPOSSIBLE\n");
  52. else {
  53. for (i=;i<=n;i++){
  54. for (j=;j<=m;j++){
  55. printf("%d",c[i][j]);
  56. if (j!=m) printf(" ");
  57. }
  58. printf("\n");
  59. }
  60. }
  61. }
  62. return ;
  63. }

poj 3279 Fliptile(二进制)的更多相关文章

  1. POJ 3279 Fliptile[二进制状压DP]

    题目链接[http://poj.org/problem?id=3279] 题意:给出一个大小为M*N(1 ≤ M ≤ 15; 1 ≤ N ≤ 15) 的图,图中每个格子代表一个灯泡,mp[i][j] ...

  2. poj 3279 Fliptile(二进制搜索)

    Farmer John knows that an intellectually satisfied cow is a happy cow who will give more milk. He ha ...

  3. POJ 3279 Fliptile (二进制枚举)

    <题目链接> <转载于 >>> > 题目大意: 给定一个M*N矩阵,有些是黑色(1表示)否则白色(0表示),每翻转一个(i,j),会使得它和它周围4个格变为另 ...

  4. POJ.3279 Fliptile (搜索+二进制枚举+开关问题)

    POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...

  5. POJ 3279 Fliptile(翻格子)

    POJ 3279 Fliptile(翻格子) Time Limit: 2000MS    Memory Limit: 65536K Description - 题目描述 Farmer John kno ...

  6. 状态压缩+枚举 POJ 3279 Fliptile

    题目传送门 /* 题意:问最少翻转几次使得棋子都变白,输出翻转的位置 状态压缩+枚举:和之前UVA_11464差不多,枚举第一行,可以从上一行的状态知道当前是否必须翻转 */ #include < ...

  7. POJ 3279(Fliptile)题解

    以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定长宽的黑白棋棋盘摆满棋子,每次操作可以反转一个位置和其上下左右共五个位置的棋子的颜色,求要使用最少翻转次数将所有棋子反转为黑 ...

  8. POJ 3279 Fliptile(反转 +二进制枚举)

    Fliptile Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 13631   Accepted: 5027 Descrip ...

  9. POJ 3279 Fliptile (dfs+二进制)

    Description Farmer John knows that an intellectually satisfied cow is a happy cow who will give more ...

随机推荐

  1. tomcat生成调试日志配置

    创建文件logging.properties 文件存放于应用WEB-INF/classes下 文件内容如下:  org.apache.juli.FileHandler.prefix = error-d ...

  2. Java中for循环中的的try-catch

    异常处理 当for循环遇上try-catch @Test public void forThrow(){ final int size = 6; for (int i=0; i<size; i+ ...

  3. C 中的typedef应用

    1. typedef  声明的新的类型名在变量名的位置出现. example: typedef unsigned int UINT 则 unsigned int a; 相当于 UINT A; 2. t ...

  4. godep 包管理

    go get -u -v github.com/tools/godep  godep save

  5. powerdessigner使用教程

    https://jingyan.baidu.com/article/86fae346e089393c49121a11.html

  6. .html() 与.text() 获取值、取值 区别

    1.html代码<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...

  7. Java的学习02

    今天依旧记录一下今天的学习的知识. /** * 测试StringBuilder StringBuffer,可变字符序列 * String对象称为“不可变对象"指的是对象内部成员变量的值无法再 ...

  8. Jmeter使用HTTP代理服务器进行录制

    1.添加一个线程组 2.在工作台右键添加HTTP代理服务器 3.配置代理服务器 *注:端口号不能被占用.排除模式中添加的东西将在录制时不被录制上. 端口可能会有被占用的情况,这种情况下点击启动会报错, ...

  9. es快照定时备份脚本

    #!/bin/bashdata1=`date "+%Y%m%d"`data2="http://0.0.0.0:9200/_snapshot/my_backup/snaps ...

  10. 字符串 String 格式化 format

    String str=String.format("Hi,%s", "王力"); 保留两位数的整数: String str=String.format(&quo ...