BZOJ_4004_[JLOI2015]装备购买_线性基

Description

脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 
(1 <= i <= n; 1 <= j <= m),每个装备需要花费 ci,现在脸哥想买一些装备,但是脸哥很穷,所以总是盘算着
怎样才能花尽量少的钱买尽量多的装备。对于脸哥来说,如果一件装备的属性能用购买的其他装备组合出(也就是
说脸哥可以利用手上的这些装备组合出这件装备的效果),那么这件装备就没有买的必要了。严格的定义是,如果
脸哥买了 zi1,.....zip这 p 件装备,那么对于任意待决定的 zh,不存在 b1,....,bp 使得 b1zi1 + ... + bpzi
p = zh(b 是实数),那么脸哥就会买 zh,否则 zh 对脸哥就是无用的了,自然不必购买。举个例子,z1 =(1; 2;
 3);z2 =(3; 4; 5);zh =(2; 3; 4),b1 =1/2,b2 =1/2,就有 b1z1 + b2z2 = zh,那么如果脸哥买了 z1 和 z2 
就不会再买 zh 了。脸哥想要在买下最多数量的装备的情况下花最少的钱,你能帮他算一下吗?

Input

第一行两个数 n;m。接下来 n 行,每行 m 个数,其中第 i 行描述装备 i 的各项属性值。接下来一行 n 个数,
其中 ci 表示购买第 i 件装备的花费。

Output

一行两个数,第一个数表示能够购买的最多装备数量,第二个数表示在购买最多数量的装备的情况下的最小花费

Sample Input

3 3
1 2 3
3 4 5
2 3 4
1 1 2

Sample Output

2 2

HINT

如题目中描述,选择装备 1 装备 2,装备 1 装备 3,装备 2 装备 3 均可,但选择装备 1 和装备 2 的花费最小,为 2。对于 100% 的数据, 1 <= n;m <= 500; 0 <= aj <= 1000。

线性基是拟阵,拟阵最优化问题使用贪心。
高斯消元一遍,每次把这一项的系数不是0并且花钱数最少的装备拿出来消去其他项。
可以证明最后的结果一定是最优的。
 
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define eps 1e-6
typedef long double f2;
int n,m;
f2 a[510][510];
f2 fabs(f2 x){return x>0?x:-x;}
void Gauss() {
int i,j,k,mx;
f2 ans=0;
int cnt=0;
for(i=1;i<=m;i++) {
mx=0;
for(j=i;j<=n;j++) {
if(fabs(a[j][i])>eps) {
if(!mx) mx=j;
else if(a[j][m+1]<a[mx][m+1]) mx=j;
}
}
if(!mx) continue;
ans+=a[mx][m+1]; cnt++;
for(j=i;j<=m+1;j++) swap(a[i][j],a[mx][j]);
for(j=i+1;j<=n;j++) {
f2 tmp=-(a[j][i]/a[i][i]);
a[j][i]=0;
for(k=i+1;k<=m;k++) a[j][k]+=tmp*a[i][k];
}
}
printf("%d %.0Lf\n",cnt,ans);
}
int main() {
scanf("%d%d",&n,&m);
int i,j;
for(i=1;i<=n;i++) {
for(j=1;j<=m;j++) {
scanf("%Lf",&a[i][j]);
}
}
for(i=1;i<=n;i++) scanf("%Lf",&a[i][m+1]);
Gauss();
}

BZOJ_4004_[JLOI2015]装备购买_线性基的更多相关文章

  1. bzoj 4004 [JLOI2015]装备购买 拟阵+线性基

    [JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1820  Solved: 547[Submit][Status][Dis ...

  2. [JLOI2015]装备购买(线性基)

    [JLOI2015]装备购买 题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 nn 件装备,每件装备有 \(m\) 个属性,用向量 \(\mathbf{z_i}\)=\((a_1, \ldots ...

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

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

  4. 【题解】 bzoj4004: [JLOI2015]装备购买 (线性基)

    bzoj4004,戳我戳我 Solution: 裸的线性基,这没啥好说的,我们说说有意思的地方(就是我老是wa的地方) Attention: 这题在\(luogu\),上貌似不卡精度,\(bzoj\) ...

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

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

  6. BZOJ4004 [JLOI2015]装备购买[贪心+线性基+高消]

    一个物品可以被其他物品表出,说明另外的每个物品看成矩阵的一个行向量可以表出该物品代表的行向量. 于是构造矩阵,求最多选多少个物品,就是尽可能用已有的物品去表示,相当于去消去一些没必要物品, 类似于xo ...

  7. [BZOJ4004][JLOI2015]装备购买(贪心+线性基)

    求最小权极大线性无关组. 先将所有向量按权值排序,从小到大依次判断,若能被前面已选向量线性表出则不选,这样一定最优. 据说是用拟阵来证明,但感性理解一下感觉比较显然,首先这样个数一定是最多的,其次对于 ...

  8. 【BZOJ4004】装备购买(线性基)

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

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

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

随机推荐

  1. angularjs学习笔记之一

    directive 通过AngularJS模块API中的.directive()方法,我们可以通过传入一个字符串和一个函数来 注册一个新指令.其中字符串是这个指令的名字,指令名应该是驼峰命名风格的,函 ...

  2. mysql之数据库的增删改查

    一.DDL 1.创建数据库 create database 数据库名 *数据库名不能中文, 不能数字正常英文 , 关键字会自动变大写 2.删除数据库 drop database 数据库名 3.使用数据 ...

  3. 排序算法入门之归并排序(java实现)

    归并排序是采用分治法的典型应用. 参考<数据结构与算法分析-Java语言描述> 归并排序其实要做两件事: (1)"分解"--将序列每次折半划分. (2)"合并 ...

  4. 我对Spring的理解。

    1.Spring实现了工厂模式的工厂类(在这里有必要解释清楚什么是工厂模式),这个类名为BeanFactory(实际上是一个接口),在程序中通常BeanFactory的子类ApplicationCon ...

  5. Oracle——多表查询

    本次预计讲解的知识点 1. 多表查询的操作.限制.笛卡尔积的问题: 2. 统计函数及分组统计的操作: 3. 子查询的操作,并且结合限定查询.数据排序.多表查询.统计查询一起完成各个复杂查询的操作: 一 ...

  6. zookeeper 分布式管理

    分布式框架: Zookeeper与paxos算法 一.            zookeeper是什么 官方说辞:Zookeeper 分布式服务框架是Apache Hadoop 的一个子项目,它主要是 ...

  7. mongodb常用语句

    一.查询 find方法 db.collection_name.find(); 查询所有的结果: select * from users; db.users.find(); 指定返回那些列(键): se ...

  8. Android弹幕功能实现,模仿斗鱼直播的弹幕效果

    转载出处:http://blog.csdn.net/sinyu890807/article/details/51933728 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即 ...

  9. ecshop 修改记录20150710

    ecshop 修改记录20150710 1:去掉头部TITLE部分的ECSHOP演示站 Powered by ecshop 前台部分:在后台商店设置 - 商店标题修改 后者打开includes/lib ...

  10. CSS中的背景、雪碧图、超链接的伪类样式

    一.背景 1.背景颜色 background-color: red; 2.背景图片 background-image: url("../../img/l1.png"); 3.图片填 ...