高斯消元…… (裸的暴力)

如果你有一个n元的方程组你会怎么办?

Ans:直接用初中的解方程组的方法呀!

没错,直接暴力加减消元。那什么是“高斯消元”?说白了,就是普通的加减消元罢了。

本人再考场上打了一个暴力解方程,大家都说要高斯消元,弄得我方极了,最后才发现我打的暴力就是高斯消元

流程

  1. 选其中一个方程
  2. 将其他方程的其中一个元与选出的方程统一系数
  3. 将选出的方程与其他方程相减,消去一个未知数,得到 n-1 个 n-1 元的方程组
  4. 重复之前的步奏,知道只剩一个一元一次的方程
  5. 求出解,将解一步步往回带,得出所有的解

代码实现

洛谷模板题:P3389 【模板】高斯消元法

 #include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std; int n;
double a[][],b[],c[];
//a为方程组,b为常数项,c为解 void gauss(){ //高斯消元
for(int i=;i<=n;i++){
for(int j=i+;j<=n;j++){
double s=a[i][n-i+]/a[j][n-i+];
for(int k=;k<=n;k++)a[j][k]*=s;
for(int k=;k<=n;k++)a[j][k]-=a[i][k];
b[j]=b[j]*s-b[i];
}
}
if(-1e-<=a[n][]&&a[n][]<=1e-)//double 会有精度误差
printf("No Solution"),exit();//系数为0,没有唯一解
c[]=b[n]/a[n][];
for(int i=n-;i>=;i--){
for(int j=;j<=n-i;j++)
b[i]-=a[i][j]*c[j];
if(-1e-<=a[i][n-i+]&&a[i][n-i+]<=1e-)
printf("No Solution"),exit(); //同上
c[n-i+]=b[i]/a[i][n-i+];
}
} int main(){
scanf("%d",&n);
for(int i=;i<=n;i++){
for(int j=;j<=n;j++)
scanf("%lf",a[i]+j);
scanf("%lf",b+i);
}
gauss();
for(int i=;i<=n;i++)printf("%.2f\n",c[i]);
}

时间复杂度O(n3),这不就是人人都能想出的大暴力吗?

Gauss 高斯消元的更多相关文章

  1. UVA 11542 高斯消元

    从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案. 先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方. 所以我们需要选择一个对应质因子指数为奇数的元素, ...

  2. 【CF24D】Broken Robot (DP+高斯消元)

    题目链接 题意:给定一个\(n\times m\)的矩阵,每次可以向→↓←移动一格,也可以原地不动,求从\((x,y)\)到最后一行的期望步数. 此题标签\(DP\) 看到上面这个肯定会想到 方法一: ...

  3. 【洛谷3232】[HNOI2013] 游走(贪心+高斯消元)

    点此看题面 大致题意: 一个无向连通图,小\(Z\)从\(1\)号顶点出发,每次随机选择某条边走到下一个顶点,并将\(ans\)加上这条边的编号,走到\(N\)号顶点时结束.请你对边进行编号,使总分期 ...

  4. Luogu P5027 【Barracuda】(高斯消元)

    祭一下第一道独立做出来的高斯消元(虽然在各大佬看来都是水题...) 首先这道题给了你n+1个一次方程,n个未知数 其中有一个方程是错误的 求解在合法的前提下最大的未知数是多少... 显然高斯消元... ...

  5. bzoj3143 游走 期望dp+高斯消元

    题目传送门 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得 ...

  6. LightOJ 1151 Snakes and Ladders 期望dp+高斯消元

    题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定   而且 ...

  7. HDU3949/AcWing210 XOR (高斯消元求线性基)

    求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...

  8. HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)

    原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...

  9. 高斯消元初步(Gauss算法)

    Gauss算法,称为高斯消元算法,用来解决n元一次方程,在解决线性方程问题起着重要作用. 简述 运用高斯消元的方法,我们可以在O(n3)的时间求出n元线性方程,但是由于时间复杂度的原因,请注意题目数据 ...

随机推荐

  1. iphone图片简单处理

    使用sips批量缩放图片大小 >>sips -s format jpeg -Z 250 someImage.PNG --out myImage.JPEG 把someImage.PNG转换为 ...

  2. iOS图片目录批量复制到android图片目录

    复制shell脚本 #!/bin/bash for i in `ls` do for imgname in `ls $i | grep '^WM.*'` do echo $imgname cp $i/ ...

  3. UVA 427 The Tower of Babylon 巴比伦塔(dp)

    据说是DAG的dp,可用spfa来做,松弛操作改成变长.注意状态的表示. 影响决策的只有顶部的尺寸,因为尺寸可能很大,所以用立方体的编号和高的编号来表示,然后向尺寸更小的转移就行了. #include ...

  4. Bellman-Ford与SPFA

    一.Bellman-Ford Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(当然也可以是无向图).与Dijkstra相比的优点是,也适合存在负权的图. 若存在最短路(不含负环时 ...

  5. ndarray数组变换

    import numpy as np 维度变换 a = np.arange(24) a array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ...

  6. 解决response在controller返回乱码的解决方式

    乱码的代码 @RequestMapping(value = "/readbook", method = RequestMethod.GET) 加入 produces = " ...

  7. Python数据结构和类型--解压序列赋值多个变量

    Python数据结构和类型 1.1 解压序列赋值给多个变量 现在有一个包含N个元素的元组或者是序列,怎样将它里面的值解压后同时赋值给N个变量? 解决思路:先通过简单的解压赋值给多个变量,前提是变量的数 ...

  8. Linux文件系统概述二

    VFS-目录项对象(dentry) 每个文件除了有一个索引节点 inode 数据结构外,还有一个目录项 dentry 数据结构 dentry 结构代表的是逻辑意义上的文件,描述的是文件逻辑上的属性,目 ...

  9. Hibernate 多表查询 - Criteria添加子字段查询条件 - 出错问题解决

    Criteria 查询条件如果是子对象中的非主键字段会报 could not resolve property private Criteria getCriteria(Favorite favori ...

  10. html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)

    使用HTML语言来设计制作 Hyper Text Markup Language 超文本标记语言 这门语言的特点就是标记,就是把所有的命令单词用<>标记起来,就可以发挥作用 还有一个特点, ...