题目链接

看这道题之前,以为线性基只是支持异或的操作。。。

那么,我认为这道题体现出了线性基的本质:

就是说如何用最小的一个集合去表示所有出现的装备。

我们假设已经会使用线性基了,那么对于这道题该怎么办呢?

  • 显然,根据贪心的思想,我们先把这些装备按照 \(cost\) 也就是花费从小向大排序。
  • 我们从左往右 \(O(n)\) 扫一遍,如果可以插入线性基就插入然后加上答案的贡献。
  • 如果不能插入,就一定不会造成贡献,这一点是很显然的。

所以,现在的关键问题是如何构建线性基。

其实我认为并没有那么困难。

因为我们已经知道异或线性基的写法,实数线性基直接套一下就好了。

这里先给出异或线性基的代码:

for (int i = 62; i >= 0; i--){
if (!(x >> (int)i)) continue;
if (!p[i]) {
p[i] = x;
break;
}
x ^= p[i];
}

观察一下可以发现,其实就是看当前位是有为一,再看线性基数组有没有被占用。

最后再把当前的 \(1\) 变成 \(0\) 的这一个简单的过程。

其实,实数的线性基也是一样的。

只是考虑如何把第 \(i\) 位消掉的问题,那直接高斯消元就可以了。

消完之后当前位上的就变成 \(0\) 了捏。

Code

#include <bits/stdc++.h>

#define file(a) freopen(a".out", "r", stdin), freopen(a".out", "w", stdout)

#define Enter putchar('\n')
#define quad putchar(' ') const int N = 505;
const long double eps = 1e-6; int n, m, p[N]; struct Node {
long double a[N];
int cost;
friend bool operator<(const Node &p, const Node &q) {
return p.cost < q.cost;
}
} node[N]; signed main(void) {
// file("1458");
std::cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
std::cin >> node[i].a[j];
for (int i = 1; i <= n; i++)
std::cin >> node[i].cost;
std::sort(node + 1, node + 1 + n);
int ans1 = 0, ans2 = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (std::fabs(node[i].a[j]) < eps)
continue;
if (!p[j]) {
p[j] = i;
ans1 ++;
ans2 += node[i].cost;
break;
}
long double K = 1.0 * node[i].a[j] / node[p[j]].a[j];
for (int k = j; k <= m; k++)
node[i].a[k] -= K * node[p[j]].a[k];
}
}
std::cout << ans1 << " " << ans2 << std::endl;
}

[JLOI2015]装备购买 题解 / 实数线性基学习笔记的更多相关文章

  1. BZOJ4004:[JLOI2015]装备购买——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=4004 https://www.luogu.org/problemnew/show/P3265 脸哥 ...

  2. ACM线性基学习笔记

    https://www.cnblogs.com/31415926535x/p/11260897.html 概述 最近的几场多校出现了好几次线性基的题目,,会想起之前在尝试西安区域赛的一道区间异或和最大 ...

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

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

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

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

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

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

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

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

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

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

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

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

  9. BZOJ 4004: [JLOI2015]装备购买

    4004: [JLOI2015]装备购买 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1154  Solved: 376[Submit][Statu ...

随机推荐

  1. python基础练习题(题目 递归求等差数列)

    day20 --------------------------------------------------------------- 实例028:递归求等差数列 题目 有5个人坐在一起,问第5个 ...

  2. Android C/C++层hook和java层hook原理以及比较

    作者:Denny Qiao(乔喜铭),云智慧/架构师. 云智慧集团成立于2009年,是全栈智能业务运维解决方案服务商.经过多年自主研发,公司形成了从IT运维.电力运维到IoT运维的产业布局,覆盖ITO ...

  3. Python 中删除列表元素的三种方法

    列表基本上是 Python 中最常用的数据结构之一了,并且删除操作也是经常使用的. 那到底有哪些方法可以删除列表中的元素呢?这篇文章就来总结一下. 一共有三种方法,分别是 remove,pop 和 d ...

  4. centos7系统安装 VMware

    安装版本: CentOS-7-x86_64-DVD-2009.iso   下载地址:阿里巴巴开源镜像 第一步:打开虚拟机,新建虚拟机引导,选择高级,下一步. 第二步:默认下一步 第三步:选择最后一项, ...

  5. 四月总结&五月计划

    四月总结 1. 主要任务 <Effective C++>书 ① 进展: 看完了30讲(共55讲),从4月20号开始居家办公,书落在公司了,一直到昨天29号才去园区上班,耽搁了.30讲之前的 ...

  6. UDP协议,多道技术,进程,同步与异步,阻塞与非阻塞

    UDP协议 简介 UDP叫做用户数据报协议,是OSI七层参考模型中传输层使用的协议,他提供的是不可靠传输,既它在传输过程 中不保证数据的完整性! 端口号 UDP使用IP地址和端口号进行标识,以此将数据 ...

  7. TENSEAL: A LIBRARY FOR ENCRYPTED TENSOR OP- ERATIONS USING HOMOMORPHIC ENCRYPTION 解读

    本文记录阅读该paper的笔记,这篇论文是TenSeal库的原理介绍. 摘要 机器学习算法已经取得了显著的效果,并被广泛应用于各个领域.这些算法通常依赖于敏感和私有数据,如医疗和财务记录.因此,进一步 ...

  8. 【单片机】CH32V103v8t6 - PA5-外部中断测试程序

    main.c文件内容 /* *@Note 外部中断线例程: EXTI_Line5(PA5) PA5设置上拉输入,下降沿触发中断. */ #include "debug.h" /** ...

  9. React简单教程-4.1-hook

    前言 虽然我们简单感受了一下 useState 的用法,但我想你还是对 React 里的 hook 迷迷糊糊的.本文我们将明确下 React 的概念. HOOK 前生今世 在我示例中,写的 React ...

  10. CabloyJS微信模块、企业微信模块已出齐

    前言 当Cabloy-企业微信模块完成时,加上之前已完成的Cabloy-微信模块,关于在CabloyJS中与微信/企业微信对接的任务已经完成了.这些模块的目标就是,只需填入各类服务的参数,就可以直接进 ...