题目链接

题意:有20个数字,0或1。如果改变一个数的状态,它左右两边的两个数的状态也会变反。问从目标状态到全0,至少需要多少次操作。

分析:

和上一题差不多,但是比上一题还简单,不多说了,但是在做题的时候犯了一个非常二的错误。。看图吧。

先输入了a[0]又,初始了a[]【】数组

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <algorithm>
  7. #define LL __int64
  8. const int maxn = +;
  9. const int INF = <<;
  10. using namespace std;
  11. int equ, var, fn;
  12. int a[maxn][maxn], x[maxn];
  13. int free_x[maxn];
  14. int gcd(int a, int b)
  15. {
  16. return b==?a:gcd(b, a%b);
  17. }
  18. int lcm(int a, int b)
  19. {
  20. return a*b/gcd(a, b);
  21. }
  22. int Gauss()
  23. {
  24. int x_mo;
  25. x_mo = ;
  26. int i, j, k, max_r, col;
  27. int ta, tb, LCM, fx_num = ;
  28. col = ;
  29.  
  30. for(k = ; k<equ && col<var; k++, col++)
  31. {
  32. max_r = k;
  33. for(i = k+; i < equ; i++)
  34. if(abs(a[i][col])>abs(a[max_r][col]))
  35. max_r = i;
  36.  
  37. if(max_r != k)
  38. for(j = k; j < var+; j++)
  39. swap(a[k][j], a[max_r][j]);
  40.  
  41. if(a[k][col]==)
  42. {
  43. free_x[fx_num++] = col; //求自由变元所在的列
  44. k--;
  45. continue;
  46. }
  47. for(i = k+; i < equ; i++)
  48. {
  49. if(a[i][col] != )
  50. {
  51. LCM = lcm(abs(a[i][col]), abs(a[k][col]));
  52. ta = LCM/abs(a[i][col]);
  53. tb= LCM/abs(a[k][col]);
  54. if(a[i][col]*a[k][col] < ) tb = -tb;
  55.  
  56. for(j = col; j < var+; j++)
  57. a[i][j] = ((a[i][j]*ta - a[k][j]*tb)%x_mo+x_mo)%x_mo;
  58. }
  59. }
  60. }
  61. for(i = k; i < equ; i++)
  62. if(a[i][col] != )
  63. return INF;
  64.  
  65. int stat=<<(var-k);
  66. int res=INF;
  67. for(i=; i<stat; i++)
  68. {
  69. int cnt=;
  70. int index=i;
  71. for(j=; j<var-k; j++)
  72. {
  73. x[free_x[j]]=(index&);
  74. if(x[free_x[j]]) cnt++;
  75. index>>=;
  76. }
  77. for(j=k-; j>=; j--)
  78. {
  79. int tmp=a[j][var];
  80. for(int l=j+; l<var; l++)
  81. if(a[j][l]) tmp^=x[l];
  82. x[j]=tmp;
  83. if(x[j])cnt++;
  84. }
  85. if(cnt<res)res=cnt;
  86. }
  87. return res;
  88. }
  89.  
  90. void init()
  91. {
  92. int i;
  93. memset(a, , sizeof(a));
  94. memset(x, , sizeof(x));
  95. for(i = ; i < ; i++)
  96. {
  97. a[i][i] = ;
  98. if(i+<)
  99. a[i+][i] = ;
  100. if(i->=)
  101. a[i-][i] = ;
  102. }
  103. }
  104. int main()
  105. {
  106. int i;
  107. equ = ;
  108. var = ;
  109. init();
  110. for(i = ; i < ; i++)
  111. scanf("%d", &a[i][]);
  112. fn = Gauss();
  113. printf("%d\n", fn);
  114. return ;
  115. }

POJ 3185 The Water Bowls (高斯消元 求最小步数)的更多相关文章

  1. POJ 3185 The Water Bowls (高斯消元)

    题目链接 题意:翻译过来就是20个0或1的开关,每次可以改变相邻三个的状态,问最小改变多少次使得所有开关都置为0,题目保证此题有解. 题解:因为一定有解,所以我们可以正序逆序遍历两次求出较小值即可.当 ...

  2. poj 3185 The Water Bowls 高斯消元枚举变元

    题目链接 给一行0 1 的数, 翻转一个就会使他以及它左右两边的都变, 求最少多少次可以变成全0. 模板题. #include <iostream> #include <vector ...

  3. POJ 开关问题 1830【高斯消元求矩阵的秩】

    Language: Default 开关问题 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 6656   Accepted: ...

  4. POJ 1681---Painter's Problem(高斯消元)

    POJ   1681---Painter's Problem(高斯消元) Description There is a square wall which is made of n*n small s ...

  5. HDU4870_Rating_双号从零单排_高斯消元求期望

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...

  6. HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)

    网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...

  7. 【BZOJ2137】submultiple 高斯消元求伯努利数

    [BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...

  8. SPOJ HIGH(生成树计数,高斯消元求行列式)

    HIGH - Highways no tags  In some countries building highways takes a lot of time... Maybe that's bec ...

  9. 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基

    题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...

随机推荐

  1. perl 脚本测试

      原文地址:  http://blog.csdn.net/johnny710vip/article/details/8905239   这是一篇关于perl脚本测试的总结性文章,其中提到了很多实用的 ...

  2. php中的性能挖掘

    搞php以后,感觉总是很别扭,因为我觉得php会很慢,因为array普遍,在Key的循环查找不是很浪费性能么!因为我以前搞.net和java,他们是用的大多是寻址和索引方式,而php中太多是使用Key ...

  3. Ext学习-基础组件介绍

    1.目标    学习对象获取,组件基础,事件模型以及学习ExtJS中的基础组件的应用. 2.内容   1.对象获取   2.组件原理以及基础   3.事件模型   4.常用组件的介绍 3.学习步骤 1 ...

  4. Hibernate各种主键生成策略与配置详解【附1--<generator class="foreign">】

    1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...

  5. NYOJ-79 拦截导弹 AC 分类: NYOJ 2014-01-01 23:25 167人阅读 评论(0) 收藏

    #include<stdio.h> int main(){ int num[1000]={0}; int n,m,x,y; scanf("%d",&n); wh ...

  6. RedHat Linux下注册Apache为系统服务并设为开机启动

    1.系统环境: 操作系统:Red Hat Enterprise Linux Server release 5.4 Apache版本:httpd-2.2.19 2.注册服务 #将apachectl复制到 ...

  7. cf 363D

    贪心加二分 虽然比赛后才过 ........ /************************************************************************* &g ...

  8. Unity3d Android程序嵌入Admob广告条

    原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140441353482/ Seems like using a simple A ...

  9. windows下eclipse远程连接hadoop错误“Exception in thread"main"java.io.IOException: Call to Master.Hadoop/172.20.145.22:9000 failed ”

    在VMware虚拟机下搭建了hadoop集群,ubuntu-12.04,一台master,三台slave.hadoop-0.20.2版本.在 master机器上利用eclipse-3.3连接hadoo ...

  10. ios开发--高德地图SDK使用简介

    高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对 ...