AcWing 209. 装备购买 (高斯消元线性空间)打卡
脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量z[i]=(ai,1,ai,2,..,ai,m)z[i]=(ai,1,ai,2,..,ai,m) 表示,每个装备需要花费 cici。
现在脸哥想买一些装备,但是脸哥很穷,所以总是盘算着怎样才能花尽量少的钱买尽量多的装备。
对于脸哥来说,如果一件装备的属性能用购买的其他装备组合出(也就是说脸哥可以利用手上的这些装备组合出这件装备的效果),那么这件装备就没有买的必要了。
严格的定义是,如果脸哥买了 z[i1],z[i2],…,z[ip]z[i1],z[i2],…,z[ip]这 p 件装备,并且不存在实数 b1,b2,…,bpb1,b2,…,bp 使得z[k]=b1z[i1]+b2z[i2]+…+bpz[ip]z[k]=b1z[i1]+b2z[i2]+…+bpz[ip],那么脸哥就会买z[k]z[k],否则 z[k]z[k]对脸哥就是无用的了,自然不必购买。
脸哥想要在买下最多数量的装备的情况下花最少的钱,你能帮他算一下吗?
输入格式
第一行包含两个整数 n和m。
接下来 n 行,每行 m 个数,其中第 i 行描述装备 i 的各项属性值。
接下来一行 n 个数,其中第i个数表示购买第 i 件装备的花费cici。
输出格式
输出占一行,包含两个整数,第一个整数表示能够购买的最多装备数量,第二个整数表示在购买最多数量的装备的情况下的最小花费。
数据范围
1≤n,m≤5001≤n,m≤500,
0≤ai,j≤10000≤ai,j≤1000
输入样例:
3 3
1 2 3
3 4 5
2 3 4
1 1 2
输出样例:
2 2
题意:给出n个向量,每个向量有m个属性,每个向量有个价值,我们现在求买最多的向量,但是花最少的钱,当然有个要求,如果其中一些变量能够由其他的拼凑出来而且价格比这低,那么就不用多次一举买这些变量
,满足这要求求最优的答案 思路:
这里讲一个概念 线性空间
其中有很多变量,如果有些变量可以被其他变量凑出来,通过向量间的加法,和数量积之和得来,那么就是线性相关,否则就是线性无关,
求最大的线性无关组,我们可以用高斯消元,如果一行都被化简成0,说明这个可以被其他凑出来,那么就不需要买,也就是矩阵的秩
这里还有个问题就是要用最少的钱,我们只需要找最大元的时候找出满足要求且最低的价格的那一个即可
#include<bits/stdc++.h>
#define maxn 100005
#define mod 1000000007
#define eps 1e-8
using namespace std;
typedef long long ll;
ll n,m;
long double a[][];
long double c[];
int main(){
cin>>n>>m;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
double temp;
cin>>temp;
a[i][j]=temp;
}
}
for(int i=;i<=n;i++){
double temp;
cin>>temp;
c[i]=temp;
}
double sum=;
ll num=;
for(int i=;i<=n;i++){
int flag=;
for(int j=i;j<=n;j++){
if(fabs(a[j][i])>eps){
if(flag==||c[j]<c[flag])
{
flag=j;
}
}
}
/*if(fabs(a[i][i])<eps){
num=i-1;
break;
}*/
if(flag==) continue;
num++;
for(int k=;k<=m;k++){
swap(a[i][k],a[flag][k]);
}
swap(c[i],c[flag]);
sum+=c[i];
for(int j=;j<=n;j++){
if(i==j||fabs(a[j][i])<eps) continue;
long double state=a[j][i]/a[i][i];
for(int k=;k<=m;k++){
a[j][k]-=a[i][k]*state;
}
}
}
cout<<num<<" "<<sum;
} /*
3 3
1 2 3
3 4 5
2 3 4
1 1 2
*/
AcWing 209. 装备购买 (高斯消元线性空间)打卡的更多相关文章
- BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4004 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装 ...
- BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]
和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #incl ...
- BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基
BZOJ严重卡精,要加 $long$ $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...
- AcWing 207. 球形空间产生器 (高斯消元)打卡
有一个球形空间产生器能够在n维空间中产生一个坚硬的球体. 现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这个n维球体的球心坐标,以便于摧毁这个球形空间产生器. ...
- AcWing 227. 小部件厂 (高斯消元)打卡
题目:https://www.acwing.com/problem/content/description/229/ 题意:有很多个零件,每个零件的生产时间都在3-9天之间,现在只知道每个工人的生产部 ...
- HDU2449 Gauss Elimination 高斯消元 高精度 (C++ AC代码)
原文链接https://www.cnblogs.com/zhouzhendong/p/HDU2449.html 题目传送门 - HDU2449 题意 高精度高斯消元. 输入 $n$ 个 $n$ 元方程 ...
- [JLOI2015]装备购买 (高斯消元)
[JLOI2015]装备购买 \(solution:\) 首先这道题的题面已经非常清晰的告诉我们这就是线性空间高斯消元的一道题(可以用某些装备来表示另一件装备,这已经不能再明显了),只是这道题要求我们 ...
- 【BZOJ4004】[JLOI2015]装备购买 贪心+高斯消元
[BZOJ4004][JLOI2015]装备购买 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 ( ...
- 【bzoj4004】[JLOI2015]装备购买 贪心+高斯消元求线性基
题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...
随机推荐
- 【Dart学习】--Dart之超级父类之Object
一,概述 -- Object Dart语言和Java一样,都是面向对象语言,所有的类也都有个公共的父类----->Object.该类位于Dart sdk核心库core目录下. 二,构造方法 // ...
- 最强DE战斗力
最强DE战斗力 时间限制: 1 Sec 内存限制: 128 MB提交: 40 解决: 14[提交][状态] 题目描述 春秋战国时期,赵国地大物博,资源非常丰富,人民安居乐业.但许多国家对它虎视眈眈 ...
- [CSP-S模拟测试]:party?(霍尔定理+最小割+树链剖分)
题目描述 $Treeland$国有$n$座城市,其中$1$号城市是首都,这些城市被一些单向高铁线路相连,对于城市$i\neq 1$,有一条线路从$i$到$p_i(p_i<i)$.每条线路都是一样 ...
- src,href 和rel的区别
src用于替换当前元素,值一般是引用的文件的绝对路径或者相对路径 href 属性的值可以是任何有效文档的相对或绝对URL,包括片段标识符和JavaScript代码段 rel REL属性用于定义链接的文 ...
- TList TObjectList的区别和使用
所在的单元 TList(Classes.pas) TObjectList(Contnrs.pas) TObjectList对象的创建方法有一个参数: constructor TObjectList.C ...
- RQNOJ PID331 家族
题目描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是 ...
- VS2017/VS2019 git Authentication failed for "XXXXXXXXXx"
解决办法: 控制面板,凭证管理==>删掉 对应代码仓库地址的凭证.删掉,是删掉.因为我更新了还是没有用.
- 利用print函数模拟打印进度条
import time , , ): time.sleep(0.1) num = i // 2 # 地板除,即取不大于/后的最小整数(3//2 = 1, 9//4 = 2, -7//2 = -4) s ...
- 第十三周学习总结&实验报告(八)
图像界面 件处理及监听处理 1.键盘事件(KeyEvent)及监听处理(KeyListener) 1.1加入事件监听 super.addWindowListener(new WindowAdapter ...
- mongo数据库基本查询语句
D:\MongoDB\Server\3.4\bin>mongo MongoDB shell version v3.-g83c3022fe4 connecting to: mongodb://12 ...