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& ...
随机推荐
- hdu 确定比赛名次(拓扑排序)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) ...
- input 标签禁止输入
1.鼠标可以点击输入框,但是不能输入 readonly 例如: <input class="layui-input" readonly > 2.鼠标点击输入框出现禁用图 ...
- Python图片验证码降噪 — 8邻域降噪
简介 图片验证码识别的可以分为几个步骤,一般用 Pillow 库或 OpenCV 来实现,这几个过程是: 1.灰度处理&二值化 2.降噪 3.字符分割 4.标准化 5.识别 所谓降噪就是把不需 ...
- SELinux 入门【转】
一.前言 安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是一个 Linux 内核模块,也是 Linux 的一个安全子系统.SELinux 主要由美国国 ...
- 20 Organizing Go code 组织go代码
Organizing Go code 16 August 2012 Introduction Go code is organized differently to that of other lan ...
- maven scope 'provided' 和 ‘compile’的区别
解释 其实这个问题很简单. 对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact(模块)对应的jar包在classpath中. 而对 ...
- Unix IPC之Posix信号量实现生产者消费者
采用多生产者,多消费者模型. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 /** * 生产者 */ P(nempty); P(mutex); // 写入一个 ...
- Python练手之爬虫
很久没更新博客了,最近自学Python,写个在百度上爬算法题题解的爬虫,第一次写爬虫..纯当练手 慢慢来.. #coding:utf-8 ''' Created on 2016年11月22日 @aut ...
- 20155225 实验三《敏捷开发与XP实践》实验报告
20155225 实验三<敏捷开发与XP实践>实验报告 一.使用工具(Code->Reformate Code)把代码重新格式化 IDEA里的Code菜单有很多实用的功能可以帮助我们 ...
- 浅谈C#中的模式窗体和非模式窗体
ShowDialog(); // 模式窗体 Show(); // 非模式窗体 区别: 返回值不同,DialogResult/void 模式窗体会使程序中断,直到关闭模式窗口 打开模式窗体后不能切换到应 ...