其他分享
首页 > 其他分享> > [JLOI2015]装备购买

[JLOI2015]装备购买

作者:互联网

题目

  点这里看题目。

分析

  可以发现,一组装备可以同时购买的条件是这组装备线性无关
  首先不难发现一个拟阵\(M=<S,I>\),其中:
  \(S\)为装备的集合;如果\(A\subseteq S\),那么\(A\in I\)当且仅当\(A\)内的元素线性无关。
  显然\(M\)是一个子集系统,考虑一下它的交换性:
  对于\(A,B\in I\),如果\(|A|<|B|\),我们需要证明\(\exists x\in B-A, A\cup \{x\}\in I\),即新的集合仍然线性无关。
  考虑反证法,即假设不存在这样的\(x\)。这意味着\(\forall x\in B-A\),\(x\)都可以在\(A\)中表示出来。那么\(B\)中的元素都可以在\(A\)中表示出来。这意味着\(B\)的线性空间包含在\(A\)的线性空间内。由于\(|A|<|B|\)且\(A,B\)各自线性无关,矛盾。因此存在交换性。
  因此这是一个拟阵。我们就可以按照装备的花费,维护线性无关组,从小到大进行贪心。
  怎么维护线性无关组呢?
  如果每次检查都用高斯消元,时间会被卡到\(O(n^4)\),当然是不可以的。
  我们一个常用于维护线性无关组的结构——线性基。
  考虑魔改线性基。我们将向量看成 “ \(x\) 进制 ” 的数。插入向量\(\boldsymbol z\)的时候,在\(x_i\)位上,如果没有元素就插入\(z\);否则我们用线性基上的元素,将\(\boldsymbol z\)上的\(x_i\)的系数消成 0 。对于一个向量,如果可以插入到线性基中,就说明它加入后组内仍然是线性无关的,需要计入答案。
  时间\(O(n^3)\)。

代码


标签:JLOI2015,装备,元素,无关,购买,线性,拟阵,向量
来源: https://www.cnblogs.com/crashed/p/12742251.html