线性空间:是由一组基底构成的所有可以组成的向量空间
  对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩  
  并且这i个主元线性无关

/*
每个向量有权值,求最小权极大线性无关组 本题是使用贪心策略的高斯消元
由输入给出的n个物品,每个物品有m种属性,和价格price
如果a物品的属性可以由其他已有物品的属性组合出,那么a可以不必购买
问最少花掉多少钱,使得所有物品都可以组合出
首先构建n*m矩阵,然后高斯消元
在求第i个主元时,取价格最小的那个即可
可用反证法证明
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 1005
#define ld long double
#define esp 1e-6
struct Vec{//带权向量
ld a[maxn];
int w;
bool operator<(const Vec & x)const {
return w<x.w;
}
}p[maxn];
int n,m; int main(){
cin>>n>>m;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
cin>>p[i].a[j];
for(int i=;i<=n;i++)scanf("%d",&p[i].w);
sort(p+,p++n);//按权值从小到大排即可
int ans=,cnt=;
//高斯消元!
int i=,j=,Max,Maxw;
for(;i<=n && j<=m;i++,j++){
Max=i;
if(fabs(p[Max].a[j])>esp)//这里一定要加fabs,因为可能会有赋值
Maxw=p[Max].w;
else Maxw=; for(int k=i+;k<=n;k++)
if(fabs(p[k].a[j])>esp && p[k].w<Maxw){Max=k;Maxw=p[k].w;}
if(fabs(p[Max].a[j])<esp){i--;continue;} ans+=Maxw;cnt++;
if(Max!=i)//把Max换到第i行
swap(p[i],p[Max]); for(int k=;k<=n;k++)//把每行的第j个数消为0
if(k!=i){
ld r=(ld)p[k].a[j]/p[i].a[j];
for(int t=;t<=m;t++)
p[k].a[t]-=r*p[i].a[t];
p[k].a[j]=;
}
} printf("%d %d\n",cnt,ans);
}

网上找到一中贼快的高斯消元写法。。以后就用它了

思路是枚举矩阵上的每个元素,对于每个非0的A[i][j],如果A[i][j]可以作为主元,那么就把F[j](即第j列上的主元)标记为i,因为剩下的位如何已经不重要了,所以直接退出本轮循环,继续下一行

若A[i][j]不可以作主元,说明第j列已经有主元了,那么就用那个主元所在的行F[j]来消A[i][j]

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cmath>
using namespace std;
#define double long double
const double eps=1e-;
struct str
{
double a[];
int v;
bool operator < (const str &s) const
{
return v<s.v;
}
}a[];
int n,m,f[];
int main()
{
int i,j,k,ans1=,ans2=;
double x;
cin>>n>>m;
for (i=;i<=n;i++)
for (j=;j<=m;j++)
cin>>a[i].a[j];
for (i=;i<=n;i++)
cin>>a[i].v;
sort(a+,a+n+);
for (i=;i<=n;i++)
for (j=;j<=m;j++)
if (fabs(a[i].a[j])>eps)
{
if (!f[j])//如果第j列还没有被作为秩,并且第i行第j列非0
{
f[j]=i;
ans1++;
ans2+=a[i].v;
break;
}
else//反之就用A[f[j]][j]来消去A[i][j]
{
x=a[i].a[j]/a[f[j]].a[j];
for (k=j;k<=m;k++)
a[i].a[k]-=a[f[j]].a[k]*x;
}
}
cout<<ans1<<" "<<ans2<<endl;
}

线性空间和异或空间(线性基)bzoj4004贪心+高斯消元优秀模板的更多相关文章

  1. 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基

    题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...

  2. 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元

    [BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...

  3. 【BZOJ2460】[BeiJing2011]元素 贪心+高斯消元求线性基

    [BZOJ2460][BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法 ...

  4. [hdu 3949]线性基+高斯消元

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 一开始给做出来的线性基wa了很久,最后加了一步高斯消元就过了. 之所以可以这样做,证明如下. 首 ...

  5. BZOJ 2844 albus就是要第一个出场 ——高斯消元 线性基

    [题目分析] 高斯消元求线性基. 题目本身不难,但是两种维护线性基的方法引起了我的思考. void gauss(){ k=n; F(i,1,n){ F(j,i+1,n) if (a[j]>a[i ...

  6. 洛谷P3389 高斯消元 / 高斯消元+线性基学习笔记

    高斯消元 其实开始只是想搞下线性基,,,后来发现线性基和高斯消元的关系挺密切就一块儿在这儿写了好了QwQ 先港高斯消元趴? 这个算法并不难理解啊?就会矩阵运算就过去了鸭,,, 算了都专门为此写个题解还 ...

  7. 【XSY2701】异或图 线性基 容斥原理

    题目描述 定义两个图\(G_1\)与\(G_2\)的异或图为一个图\(G\),其中图\(G\)的每条边在\(G_1\)与\(G_2\)中出现次数和为\(1\). 给你\(m\)个图,问你这\(m\)个 ...

  8. 【bzoj4004】【JLOI2015】装备购买 (线性基+高斯消元)

    Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 < ...

  9. bzoj2115 [Wc2011] Xor——高斯消元 & 异或线性基

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2115 异或两次同一段路径的权值,就相当于没有走这段路径: 由此可以得到启发,对于不同的走法, ...

随机推荐

  1. Javascript - Jquery - 事件

    事件(Event) 文档事件 文档的载入事件 ready(fn) $(document).ready(function () { }); //或$(function () {}); //或$(docu ...

  2. linux中如何使用终端裁剪图片?

    1,首先要安装支持图片裁剪的包: sudo apt-get install imagemagick 需要的话可以update一下, 2,在图片所在位置打开终端,我的我的截图叫screenshot.pn ...

  3. Java HashMap工作原理及实现[转]

    原文:http://yikun.github.io/2015/04/01/Java-HashMap%E5%B7%A5%E4%BD%9C%E5%8E%9F%E7%90%86%E5%8F%8A%E5%AE ...

  4. Spring Resource配置

    1-classpath的设置: 2-Resource类型 3-ResourceLoader接口 加载resource的接口,只有一个方法getResource().所有ApplicationConte ...

  5. SpringBoot2.0+ DataSourceInitializer不生效的问题

    1.在url后声明时区 2.更换mysql6.0+的驱动 3.配置属性initialization-mode 为 always 我就是这样解决问题的,如果没解决的话,请在留言处指出错误.谢谢

  6. [BugBounty] Sleeping stored Google XSS Awakens a $5000 Bounty

    来源:https://blog.it-securityguard.com/bugbounty-sleeping-stored-google-xss-awakens-a-5000-bounty/ 理解 ...

  7. NUMA的取舍与优化设置【转】

    NUMA的取舍与优化设置 在os层numa关闭时,打开bios层的numa会影响性能,QPS会下降15-30%; 在bios层面numa关闭时,无论os层面的numa是否打开,都不会影响性能. 安装n ...

  8. C++类的继承中构造函数和析构函数调用顺序例子

    /*当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止.简而言之,对象是由“底层向上”开始构造的.因为,构造函数 ...

  9. ABP后台服务之作业调度Quartz.NET

    一.简介 Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活 ...

  10. hibernate框架学习之使用SQLQuery查询数据

    SQLQuery对象的获取 Hibernate支持使用原生SQL语句进行查询,通过session对象获得SQLQuery对象进行,需要传入SQL语句 SQLQuery createSQLQuery(S ...