题意;

有n个装备,每个装备有m个属性,每件装备的价值为cost。

小哥,为了省钱,如果第j个装备的属性可以由其他准备组合而来。比如

每个装备属性表示为, b1, b2.......bm . 它可以由其他2个装备组合而成,则

b1=k1*a1+h1*c1.  b2=k1*a2+h2*c1.......bm=km*am+hm*cm这样的话,把属性看做是向量,是不是相当于2个m维度的向量,线性的表示了第三个向量呢?

那么,题目的意思就是在n个向量中,找出一组基,并且这一组基的价值和最小。

这相当于把这些向量先放进一个矩阵中,这里出现了一个问题,那就是这些向量是按什么样的顺序放的。其实,我们是按价值从小到大依次从上向下放。至于为什么,后面会讲。

当这样一个矩阵构造好了之后,我们回到原问题。我们求在n个向量中,找出一组基,并且这一组基的价值和最小。

那么这一组基其实就是矩阵的极大无关组。而求极大无关组,直接运用高斯消元就行了。但是在这个题中我们需要改变一般高斯消元中主元的选择(一般高斯消元一般选择某一列中最大值(不懂的自己查一下代码))

我们的主元是这样的,枚举从1到m的列,第一个不为0的所在行作为主元。 可能不太明白,我举个例子

          这样,先枚举[1][1]=0; 枚举下一个[1][2]!=0 则,列2的主元就是第一行了,并把它记录在p[2]=1中,后面跳出,枚举第2行

[2][1]!=0则,p[1]=2;跳出, 枚举第3行,因为第1列的主元已经有了,然后第2行把第3行进行消元。完成后,枚举到第2列,然以用第2列的主元第1行,消第3行的元,然后依次类推。那么最后的个数和代价就是基的个数和基的价值。为什么这样?你是不是已经发现,选择的主元肯定是第一,第二前面的行。我们刚刚放入向量的价值从上到下是从小到大的,这样就是一个贪心。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 505
const long double eps = 1e-;
struct node
{
long double x[maxn];
int cost;
}a[maxn];
int n, m, p[maxn], cnt;
int sum;
bool cmp(node a, node b){
return a.cost < b.cost;
}
void guass()
{
for (int i = ; i <= n;++i)
for (int j = ; j <= m; ++j)
{
if (abs(a[i].x[j])>eps) //当矩阵【i】【j】>0时,
{
if (!p[j])
{
p[j] = i;
cnt++; sum += a[i].cost;
break;
}
else
{
long double t = a[i].x[j] / a[p[j]].x[j];
for (int k = j; k <= m; ++k)
a[i].x[k] -= a[p[j]].x[k] * t;
}
}
}
}
int main()
{
cin >> n >> m;
for (int i = ; i <= n;++i)
for (int j = ; j <= m; ++j)
cin >> a[i].x[j];
for (int i = ; i <= n; ++i)
cin >> a[i].cost;
sort(a + , a + n+, cmp);
guass();
//printf("%d %d\n", cnt, sum);
cout << cnt << " " << sum << endl;
}

代码

P3265 [JLOI2015]装备购买(高斯消元+贪心,线性代数)的更多相关文章

  1. BZOJ 4004 JLOI2015 装备购买 高斯消元+线性基

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4004 Description 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装 ...

  2. BZOJ 4004: [JLOI2015]装备购买 高斯消元解线性基

    BZOJ严重卡精,要加 $long$  $double$ 才能过. 题意:求权和最小的极大线性无关组. 之前那个方法解的线性基都是基于二进制拆位的,这次不行,现在要求一个适用范围更广的方法. 考虑贪心 ...

  3. BZOJ 4004: [JLOI2015]装备购买 [高斯消元同余 线性基]

    和前两(一)题一样,不过不是异或方程组了..... 然后bzoj的新数据是用来卡精度的吧..... 所有只好在模意义下做啦 只是巨慢无比 #include <iostream> #incl ...

  4. BZOJ 3143 高斯消元+贪心....

    思路: 先算一下每条边经过次数的期望 转化为每个点经过次数的期望 边的期望=端点的期望/度数 统计一下度数 然后高斯消元 贪心附边权--. //By SiriusRen #include <cm ...

  5. 洛谷P3265 [JLOI2015]装备购买(线性基+高斯消元)

    传送门 不知道线性基是什么东西的可以看看蒟蒻的总结 不难看出题目讲的就是线性基 这种最小化权值的问题一般都是贪心的,就是按价值从低到高考虑每一个是否能选 据说贪心的证明得用拟阵我不会 据说这题是实数意 ...

  6. 洛谷P3265 [JLOI2015]装备购买 [线性基]

    题目传送门 装备购买 格式难调,题面就不放了. 分析: 一句话,有$n$件物品,每件物品有$m$个属性和一个花费值,如果一个装备的属性值可以由其他装备的属性值改变系数后组合得到那就不买,求购买最多装备 ...

  7. [HNOI2013] 游走 - 概率期望,高斯消元,贪心

    假如我们知道了每条边经过的期望次数,则变成了一个显然的贪心.现在考虑如何求期望次数. 由于走到每个点后各向等概率,很显然一条边的期望次数可以与它的两个端点的期望次数,转化为求点的期望次数 考虑每个点对 ...

  8. Luogu P3265 [JLOI2015]装备购买

    好吧刚开始不知道自己在写什么,,,后来写了线性方程组,又过了一天一上午终于明白了... 当然题意很显然:求代价最小的极大线性无关组. 那就高斯消元(好吧刚开始我不会用它来解这道题qwq) 第一个循环是 ...

  9. 【BZOJ 4004】 装备购买(高斯消元+贪心)

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

随机推荐

  1. Mysql常用单词

    Create 建造,创造Data数据Database数据库(缩写db)If如果Not没有Exists存在Table表Drop 去掉Delete删除Show展示Select选择Default默认Uniq ...

  2. C#实现微信AES-128-CBC加密数据的解密

    小程序登录时,获得用户的信息,只是昵称,无法用作ID.而有用的数据,都加密着,腾讯给出了解密的方法: 加密数据解密算法 接口如果涉及敏感数据(如wx.getUserInfo当中的 openId 和un ...

  3. php5.5之后新特性整理

    1 生成器 yield关键字yield的中文文档在这里:http://php.net/manual/zh/language.generators.overview.php查看文档,能知道yield的一 ...

  4. git 出现gnome-ssh-askpass:32737

    今天在git push origin master时,竟然出现了错误 (gnome-ssh-askpass:32737): Gtk-WARNING **: cannot open display: e ...

  5. 进程&线程&协程

    进程  一.基本概念 进程是系统资源分配的最小单位, 程序隔离的边界系统由一个个进程(程序)组成.一般情况下,包括文本区域(text region).数据区域(data region)和堆栈(stac ...

  6. 【读书笔记】iOS-属性

    assign:简单的赋值. retain:赋值之后,会调用新的retain方法和旧值的release方法. copy:表示先将值拷贝一份,然后,将这个拷贝赋值给实例变量,这个修饰词只适用于实现了NSC ...

  7. 11.1、socket连接中的粘包、精确传输问题

    粘包: 发生原因: 当调用send的时候,数据并不是即时发给客户端的.而是放到了系统的socket发送缓冲区里,等缓冲区满了.或者数据等待超时了,数据才会发送,所以有时候发送太快的话,前一份数据还没有 ...

  8. Source Insight里头文件注释和函数头的注释

    1.将下述代码拷贝入一个文件,扩展名为em 2.打开BASE工程,添加本文件,并重新同步 3.添加hh_InsertFuncHeader的快捷键,即为函数头注释,光标需要放在函数名那一行,否则无效 4 ...

  9. asp.net mvc5中的过滤器重写

    asp.net mvc5中增加了一种过滤器类型叫过滤器重写,这种过滤器类型可以在操作或者控制器上忽略更高层次上设置的过滤器类型,它可以重写五种基本的过滤器接口类型:IAuthenticationFil ...

  10. CSS| 框模型-padding

    例子: