POJ 3185 The Water Bowls (高斯消元 求最小步数)
题意:有20个数字,0或1。如果改变一个数的状态,它左右两边的两个数的状态也会变反。问从目标状态到全0,至少需要多少次操作。
分析:
和上一题差不多,但是比上一题还简单,不多说了,但是在做题的时候犯了一个非常二的错误。。看图吧。
先输入了a[0]又,初始了a[]【】数组
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cstdlib>
- #include <cmath>
- #include <algorithm>
- #define LL __int64
- const int maxn = +;
- const int INF = <<;
- using namespace std;
- int equ, var, fn;
- int a[maxn][maxn], x[maxn];
- int free_x[maxn];
- int gcd(int a, int b)
- {
- return b==?a:gcd(b, a%b);
- }
- int lcm(int a, int b)
- {
- return a*b/gcd(a, b);
- }
- int Gauss()
- {
- int x_mo;
- x_mo = ;
- int i, j, k, max_r, col;
- int ta, tb, LCM, fx_num = ;
- col = ;
- for(k = ; k<equ && col<var; k++, col++)
- {
- max_r = k;
- for(i = k+; i < equ; i++)
- if(abs(a[i][col])>abs(a[max_r][col]))
- max_r = i;
- if(max_r != k)
- for(j = k; j < var+; j++)
- swap(a[k][j], a[max_r][j]);
- if(a[k][col]==)
- {
- free_x[fx_num++] = col; //求自由变元所在的列
- k--;
- continue;
- }
- for(i = k+; i < equ; i++)
- {
- if(a[i][col] != )
- {
- LCM = lcm(abs(a[i][col]), abs(a[k][col]));
- ta = LCM/abs(a[i][col]);
- tb= LCM/abs(a[k][col]);
- if(a[i][col]*a[k][col] < ) tb = -tb;
- for(j = col; j < var+; j++)
- a[i][j] = ((a[i][j]*ta - a[k][j]*tb)%x_mo+x_mo)%x_mo;
- }
- }
- }
- for(i = k; i < equ; i++)
- if(a[i][col] != )
- return INF;
- int stat=<<(var-k);
- int res=INF;
- for(i=; i<stat; i++)
- {
- int cnt=;
- int index=i;
- for(j=; j<var-k; j++)
- {
- x[free_x[j]]=(index&);
- if(x[free_x[j]]) cnt++;
- index>>=;
- }
- for(j=k-; j>=; j--)
- {
- int tmp=a[j][var];
- for(int l=j+; l<var; l++)
- if(a[j][l]) tmp^=x[l];
- x[j]=tmp;
- if(x[j])cnt++;
- }
- if(cnt<res)res=cnt;
- }
- return res;
- }
- void init()
- {
- int i;
- memset(a, , sizeof(a));
- memset(x, , sizeof(x));
- for(i = ; i < ; i++)
- {
- a[i][i] = ;
- if(i+<)
- a[i+][i] = ;
- if(i->=)
- a[i-][i] = ;
- }
- }
- int main()
- {
- int i;
- equ = ;
- var = ;
- init();
- for(i = ; i < ; i++)
- scanf("%d", &a[i][]);
- fn = Gauss();
- printf("%d\n", fn);
- return ;
- }
POJ 3185 The Water Bowls (高斯消元 求最小步数)的更多相关文章
- POJ 3185 The Water Bowls (高斯消元)
题目链接 题意:翻译过来就是20个0或1的开关,每次可以改变相邻三个的状态,问最小改变多少次使得所有开关都置为0,题目保证此题有解. 题解:因为一定有解,所以我们可以正序逆序遍历两次求出较小值即可.当 ...
- poj 3185 The Water Bowls 高斯消元枚举变元
题目链接 给一行0 1 的数, 翻转一个就会使他以及它左右两边的都变, 求最少多少次可以变成全0. 模板题. #include <iostream> #include <vector ...
- POJ 开关问题 1830【高斯消元求矩阵的秩】
Language: Default 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6656 Accepted: ...
- POJ 1681---Painter's Problem(高斯消元)
POJ 1681---Painter's Problem(高斯消元) Description There is a square wall which is made of n*n small s ...
- HDU4870_Rating_双号从零单排_高斯消元求期望
原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4870 原题: Rating Time Limit: 10000/5000 MS (Java/Other ...
- HDU 5833 (2016大学生网络预选赛) Zhu and 772002(高斯消元求齐次方程的秩)
网络预选赛的题目……比赛的时候没有做上,确实是没啥思路,只知道肯定是整数分解,然后乘起来素数的幂肯定是偶数,然后就不知道该怎么办了… 最后题目要求输出方案数,首先根据题目应该能写出如下齐次方程(从别人 ...
- 【BZOJ2137】submultiple 高斯消元求伯努利数
[BZOJ2137]submultiple Description 设函数g(N)表示N的约数个数.现在给出一个数M,求出所有M的约数x的g(x)的K次方和. Input 第一行输入N,K.N表示M由 ...
- SPOJ HIGH(生成树计数,高斯消元求行列式)
HIGH - Highways no tags In some countries building highways takes a lot of time... Maybe that's bec ...
- 【bzoj2115】[Wc2011] Xor DFS树+高斯消元求线性基
题目描述 输入 第一行包含两个整数N和 M, 表示该无向图中点的数目与边的数目. 接下来M 行描述 M 条边,每行三个整数Si,Ti ,Di,表示 Si 与Ti之间存在 一条权值为 Di的无向边. 图 ...
随机推荐
- perl 脚本测试
原文地址: http://blog.csdn.net/johnny710vip/article/details/8905239 这是一篇关于perl脚本测试的总结性文章,其中提到了很多实用的 ...
- php中的性能挖掘
搞php以后,感觉总是很别扭,因为我觉得php会很慢,因为array普遍,在Key的循环查找不是很浪费性能么!因为我以前搞.net和java,他们是用的大多是寻址和索引方式,而php中太多是使用Key ...
- Ext学习-基础组件介绍
1.目标 学习对象获取,组件基础,事件模型以及学习ExtJS中的基础组件的应用. 2.内容 1.对象获取 2.组件原理以及基础 3.事件模型 4.常用组件的介绍 3.学习步骤 1 ...
- Hibernate各种主键生成策略与配置详解【附1--<generator class="foreign">】
1.assigned 主键由外部程序负责生成,在 save() 之前必须指定一个.Hibernate不负责维护主键生成.与Hibernate和底层数据库都无关,可以跨数据库.在存储对象前,必须要使用主 ...
- 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 ...
- RedHat Linux下注册Apache为系统服务并设为开机启动
1.系统环境: 操作系统:Red Hat Enterprise Linux Server release 5.4 Apache版本:httpd-2.2.19 2.注册服务 #将apachectl复制到 ...
- cf 363D
贪心加二分 虽然比赛后才过 ........ /************************************************************************* &g ...
- Unity3d Android程序嵌入Admob广告条
原地址:http://dong2008hong.blog.163.com/blog/static/4696882720140441353482/ Seems like using a simple A ...
- 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 ...
- ios开发--高德地图SDK使用简介
高德LBS开放平台将高德最专业的定位.地图.搜索.导航等能力,以API.SDK等形式向广大开发者免费开放.本章节我们来简单学习一下如何使用它的定位及地图SDK. 一.相关框架及环境配置 地图SDK 对 ...