BZOJ.2460.[BeiJing2011]元素(线性基 贪心)
线性基:https://blog.csdn.net/qq_36056315/article/details/79819714。
\(Description\)
求一组矿石,满足其下标异或和不为0,且价值和最大。
\(Solution\)
按价值从大到小依次插入线性基,这样最后得到的集合就是价值和最大的了。
贪心策略简单证明(参考:https://www.cnblogs.com/acmsong/p/7508022.html):
假设当前选取的集合\(S\)价值为\(\{v1,v2,...,vn\}\),标号为\(\{id1,id2,...,idn\}\)。所有物品中价值最大的为\(vMax\)(\(idMax\)),且当前集合中不包含\(vMax\).
那么\(vMax\)一定可以替换掉\(S\)中的某个元素,使得价值和更大。
如果不能直接插入\(vMax\),说明\(S∪\{1\}\)变得线性相关了,即\(S\)中一定存在一个子集,其下标的\(Xor\)和等于\(idMax\)。
即$$ id[x1]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[Max] $$
然后\(id[Max]\)可以把任意一个元素替换掉,假设是\(x1\),那么两边同时异或\(id[Max]^{\wedge}id[x1]\):$$ id[Max]{\wedge}id[x2]{\wedge}...^{\wedge}id[xn]=id[x1] $$
这样就可以把\(id[x1]\)线性表示出来。而\(S\)中如果不加\(id[x1]\)的话是一定表示不出\(id[x1]\)的,因为\(S\)中异或和不为\(0\)(左边异或掉\(id[x1]\)是不等于\(id[x1]\)的)。
所以替换后的线性基和之前是等价的。
用拟阵能证,但是找不到啥详细的证明,我也没拿它证过啥别东西。。
写x&(1ll<<i)
的话别忘了1ll
...
#include <cstdio>
#include <cctype>
#include <algorithm>
#define gc() getchar()
typedef long long LL;
const int N=1005;
LL base[69];
struct Node{
LL id; int val;
bool operator <(const Node &x)const{
return val>x.val;
}
}A[N];
inline LL read()
{
LL now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
int main()
{
int n=read();
for(int i=1; i<=n; ++i) A[i].id=read(), A[i].val=read();
std::sort(A+1,A+1+n);
int ans=0;
for(int i=1; i<=n; ++i)
{
LL now=A[i].id;
for(int j=60; ~j; --j)
if(now&(1ll<<j))
if(base[j]) now^=base[j];
else {base[j]=now; break;}
if(now) ans+=A[i].val;
}
printf("%d\n",ans);
return 0;
}
BZOJ.2460.[BeiJing2011]元素(线性基 贪心)的更多相关文章
- BZOJ 2460: [BeiJing2011]元素 线性基
2460: [BeiJing2011]元素 Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力 ...
- bzoj 2460 [BeiJing2011]元素 (线性基)
链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2460 题意: 给你一堆矿石,矿石有a,b两种性质,取任意个矿石,满足取得的这些矿石a性质异或 ...
- BZOJ 2460 [BeiJing2011]元素 ——线性基
[题目分析] 线性基,由于最多有63个,只需要排序之后,动态的去维护线性基即可. [代码] #include <cstdio> #include <cstring> #incl ...
- BZOJ 2460 [BeiJing2011]元素(线性基模板题)
Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石.一般地,矿石越多则法力越强 ...
- [bzoj2460] [BeiJing2011]元素(线性基+贪心)
题目大意: 有一些矿石,每个矿石有一个a和一个b值,要求选出一些矿石,b的和最大且不存在某个矿石子集它们的a的异或和为0. 解题关键:对魔力进行由大到小排序,依次加入线性基,统计即可. #includ ...
- BZOJ:2460[BeiJing2011]元素 (异或基+贪心)
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2910 Solved: 1535 题目链接:https: ...
- BZOJ 2460 & 洛谷 P4570 [BJWC2011]元素 (线性基 贪心)
题目链接: 洛谷 BZOJ 题意 给定 \(n\) 个矿石,每个矿石有编号和魔力值两种属性,选择一些矿石,使得魔力值最大且编号的异或和不为 0. 思路 线性基 贪心 根据矿石的魔力值从大到小排序. 线 ...
- BZOJ 2460: [BeiJing2011]元素
2460: [BeiJing2011]元素 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 878 Solved: 470[Submit][Statu ...
- BZOJ-6-2460: [BeiJing2011]元素-线性基
链接 :https://www.lydsy.com/JudgeOnline/problem.php?id=2460 思路 :线性基不唯一,所以排序 进行贪心选择,价值最大的线性基, #include& ...
随机推荐
- TCP三次握手与四次挥手过程
TCP连接的建立(三次握手) 首先,客户端与服务器均处于未连接状态,并且是客户端主动向服务器请求建立连接: 客户端将报文段中的SYN=1(同步位),并选择一个seq=x,(即该请求报文的序号为x) ...
- mysql使用模板解决旧数据处理,默认初始化数据的通用方法!
一 业务介绍 先来看看我这得大致业务需求,这次业务比较简单: 即从现在开始,每次new一个爷爷都需要默认初始化给这个爷爷三个儿子(子表,爷爷id去关联),并在初始化每个儿子的同时再给每个儿子初始化若干 ...
- 60、二叉搜索树的第k个结点
一.题目 给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 二.解法 package algorithm ...
- aarch64_g1
GAPDoc-1.5.1-12.fc26.noarch.rpm 2017-02-14 07:37 1.0M fedora Mirroring Project GAPDoc-latex-1.5.1-12 ...
- kettle简单插入与更新
Kettle简介:Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定.Kettle 中文名称叫水壶,该项目的主程序员MATT 希望 ...
- 【bzoj3065】: 带插入区间K小值 详解——替罪羊套函数式线段树
不得不说,做过最爽的树套树———— 由于有了区间操作,我们很容易把区间看成一棵平衡树,对他进行插入,那么外面一层就是平衡树了,这就与我们之前所见到的不同了.我们之前所见到的大多数是线段树套平衡树而此题 ...
- Linux压缩打包方法连载之三:bzip2, bzcat 命令
Linux压缩打包方法有多种,本文集中讲解了bzip2, bzcat 命令的使用.案例说明,例如# 与 gzip 同样的,都是在计算压缩比的参数,-9 最佳,-1 最快. AD: 我们遇见Linux压 ...
- MySQL 四种链接
1.内联接 INNER JOIN(典型的联接运算,使用像 = 或 <> 之类的比较运算符).包括相等联接和自然联接. 内联接使用比较运算符根据每个表共有的列的值匹配两个表中的行. ...
- tf.metrics.accuracy ==>坑货
tf.metrics.accuracy输出两个值,第一个值为上几步的平均精度,第二值是上几步与该步的精度的平均值. 正常的计算单个batch正确率的代码 self.correct_prediction ...
- Mysql建表语句
create table messages( id int unsigned primary key auto_increment, sender varchar(64) not null, gett ...