Gauss 高斯消元
高斯消元…… (裸的暴力)
如果你有一个n元的方程组你会怎么办?
Ans:直接用初中的解方程组的方法呀!
没错,直接暴力加减消元。那什么是“高斯消元”?说白了,就是普通的加减消元罢了。
本人再考场上打了一个暴力解方程,大家都说要高斯消元,弄得我方极了,最后才发现我打的暴力就是高斯消元
流程
- 选其中一个方程
- 将其他方程的其中一个元与选出的方程统一系数
- 将选出的方程与其他方程相减,消去一个未知数,得到 n-1 个 n-1 元的方程组
- 重复之前的步奏,知道只剩一个一元一次的方程
- 求出解,将解一步步往回带,得出所有的解
代码实现
洛谷模板题: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 高斯消元的更多相关文章
- UVA 11542 高斯消元
从数组中选择几个数,要求他们的乘积可以开平方,问有多少种方案. 先将单个数拆分成质因子,对于这个数而言,那些指数为奇数的质因子会使这个数无法被开平方. 所以我们需要选择一个对应质因子指数为奇数的元素, ...
- 【CF24D】Broken Robot (DP+高斯消元)
题目链接 题意:给定一个\(n\times m\)的矩阵,每次可以向→↓←移动一格,也可以原地不动,求从\((x,y)\)到最后一行的期望步数. 此题标签\(DP\) 看到上面这个肯定会想到 方法一: ...
- 【洛谷3232】[HNOI2013] 游走(贪心+高斯消元)
点此看题面 大致题意: 一个无向连通图,小\(Z\)从\(1\)号顶点出发,每次随机选择某条边走到下一个顶点,并将\(ans\)加上这条边的编号,走到\(N\)号顶点时结束.请你对边进行编号,使总分期 ...
- Luogu P5027 【Barracuda】(高斯消元)
祭一下第一道独立做出来的高斯消元(虽然在各大佬看来都是水题...) 首先这道题给了你n+1个一次方程,n个未知数 其中有一个方程是错误的 求解在合法的前提下最大的未知数是多少... 显然高斯消元... ...
- bzoj3143 游走 期望dp+高斯消元
题目传送门 题意: 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点,获得 ...
- LightOJ 1151 Snakes and Ladders 期望dp+高斯消元
题目传送门 题目大意:10*10的地图,不过可以直接看成1*100的,从1出发,要到达100,每次走的步数用一个大小为6的骰子决定.地图上有很多个通道 A可以直接到B,不过A和B大小不确定 而且 ...
- HDU3949/AcWing210 XOR (高斯消元求线性基)
求第k小的异或和,用高斯消元求更简单一些. 1 //用高斯消元求线性基 2 #include<bits/stdc++.h> 3 using namespace std; 4 #define ...
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...
- 高斯消元初步(Gauss算法)
Gauss算法,称为高斯消元算法,用来解决n元一次方程,在解决线性方程问题起着重要作用. 简述 运用高斯消元的方法,我们可以在O(n3)的时间求出n元线性方程,但是由于时间复杂度的原因,请注意题目数据 ...
随机推荐
- Maven归纳
一.常用功能 1.Maven的中央仓库 https://mvnrepository.com/ 2.添加jar包依赖 1.首先点击pom.xml,然后点击弹出页面中的Dependencies选项,接 ...
- Synchronized关键字整理
Synchronized关键字整理 作用:能够保证在同一时刻最多只有一个线程执行该段代码,以达到保证并发安全效果. 两个用法: 1.对象锁: 包括方法锁(默认锁对象为this当前实例对象)和同步代码块 ...
- Asp.Net Core 入门(九)—— 环境变量 TagHelper
我们在之前讲Program.cs文件做了什么的时候,提到启动CreaeDefaultBuilder会获取环境变量来做一些判断之类的操作.那么我们的Taghelper也可以使用“ASPNETCORE_E ...
- pandas小结
pandas part I: # 总结: DataFrame.loc[0:5] 一共6行数据,而切片[0:5]只有5个数据 在对df的行数据删除后,有些index已缺失,此时用 iloc[]来按照位置 ...
- end和sep的使用方法
end: 默认是换行'\n',表示以什么结尾,比如以, | \n 等 方法: 默认end = '\n' a b c 如果end = ' ' a b c sep: 默认是空格' ' 表示两个字符之间用什 ...
- 歌乐第二弹:C++九九八十一
第一弹传送门:极乐净土 二话不说,上代码(注意事项在第一弹里): #include <windows.h> //q前缀为低音,g为高音,s前缀为半音阶 const int q1 = 131 ...
- Vuex基本概念
Vuex基本概念 State Getter Mutation Action Module 简单的Store import Vue from 'vue'; import Vuex from 'vuex' ...
- Fortran学习笔记5(数组Array)
数组的声明方式 一维数组 二维数组 多维数组 数组索引值的改变 自定义类型的数组定义 对数组内容的设置 利用隐含式循环设置数组初值 对整个数组操作 对部分数组的操作 where函数 Forall函数 ...
- Django2.x中url路由的path()与re_path()参数解释
在新版本Django2.x中,url的路由表示用path和re_path代替,模块的导入由django1.x版本的from django.conf.urls import url,include变成现 ...
- vue-music:歌词的其他功能
由于歌词的播放需要歌曲播放,切换歌曲,歌曲的播放模式等等有关联,因此,需要在这几处处理相关问题 1.循环播放回不到开始位置 loop() { this.$refs.audio.currentTime ...