题目描述

相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术。那时人们就认识到,一个法杖的法力取决于使用的矿石。

一般地,矿石越多则法力越强,但物极必反:有时,人们为了获取更强的法力而使用了很多矿石,却在炼制过程中发现魔法矿石全部消失了,从而无法炼制出法杖,这个现象被称为“魔法抵消” 。特别地,如果在炼制过程中使用超过一块同一种矿石,那么一定会发生“魔法抵消”。后来,随着人们认知水平的提高,这个现象得到了很好的解释。经过了大量的实验后,著名法师 Dmitri 发现:如果给现在发现的每一种矿石进行合理的编号(编号为正整数,称为该矿石的元素序号),那么,一个矿石组合会产生“魔法抵消”当且仅当存在一个非空子集,那些矿石的元素序号按位异或起来为零。(如果你不清楚什么是异或,请参见下一页的名词解释。 )

例如,使用两个同样的矿石必将发生“魔法抵消”,因为这两种矿石的元素序号相同,异或起来为零。并且人们有了测定魔力的有效途径,已经知道了:合成出来的法杖的魔力等于每一种矿石的法力之和。人们已经测定了现今发现的所有矿石的法力值,并且通过实验推算出每一种矿石的元素序号。

现在,给定你以上的矿石信息,请你来计算一下当时可以炼制出的法杖最多有多大的魔力。

输入格式

第一行包含一个正整数N,表示矿石的种类数。
接下来 NN行,每行两个正整数\mathrm{Number}_iNumberi​ 和 \mathrm{Magic}_iMagici​,表示这种矿石的元素序号 和魔力值。

输出格式

仅包一行,一个整数代表最大的魔力值。

输入
1 10
2 20
3 30

输出

50

题解:由题意分析得。我们需要构造一个关于元素序号的线性基,使得魔力值的和最大

所以我们构造线性基的时候,就把魔力值最大的石头序号放在线性基内,由于线性基内的元素异或不会得到0,所以满足题意要求。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1000;
struct node
{ll num;ll magic;
} a[maxn<<1];
ll dp[maxn];
ll cmb(node fx,node fy)
{return fx.magic>fy.magic;
}
bool insert_num(ll x)
{for(int i=62; i>=0; i--){if(x&(1ll<<i))///注意long long{if(dp[i])x^=dp[i];else{dp[i]=x;return true;}}}return false;
}
int main()
{int n;scanf("%d",&n);for(int i=1; i<=n; i++)scanf("%lld %lld",&a[i].num,&a[i].magic);sort(a+1,a+n+1,cmb);ll ans=0;for(int j=1; j<=n; j++)if(insert_num(a[j].num))///查看是否能够插入线性基ans+=a[j].magic;printf("%lld\n",ans);return 0;
}

P4570 [BJWC2011]元素题解相关推荐

  1. P4570 [BJWC2011]元素(线性基+贪心)

    题目链接:https://www.luogu.org/problem/P4570 题目大意: 给一个序列,在这个序列中选一些数,这些数的魔法值之和要最大,要求这些数中任意几个数的异或和不为0. 解题报 ...

  2. P4570 [BJWC2011]元素

    题目描述: 每个矿石有序号和魔力值,每个矿石最多使用一次,且多个矿石序号不能异或为0的前提下,问最多可以得到多少魔力值 题解: 异或运算的最终结果只和用于运算的数的各位上1的数量有关,与各数字运算的顺 ...

  3. [BJWC2011]元素

    嘟嘟嘟 题中说选的数的编号亦或和不能为0,也就是在这个集合中,不能用不同的选取方案亦或出相同的值.由此联想到线性基的一个性质是,每一个数都能由线性基中特定的一些数亦或得到. 所以我们就是要求出这些数的 ...

  4. LeetCode 27 移除元素 题解

    力扣链接:27.移除元素 要求:不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组.元素的顺序可以改变.你不需要考虑数组中超出新长度后面的元素. 方法一: 思路:利用双指针,头 ...

  5. BZOJ2460:[BJWC2011]元素(贪心,线性基)

    Description 相传,在远古时期,位于西方大陆的 Magic Land 上,人们已经掌握了用魔法矿石炼制法杖的技术.那时人们就认识到,一个法杖的法力取决于使用的矿石. 一般地,矿石越多则法力越 ...

  6. 算法竞赛中的线性代数

    线性代数 文章目录 线性代数 一.高斯-约旦消元 1. 求解线性方程组 2. 计算行列式 3. 矩阵求逆 4. 算法比较 求解线性方程组( int 型) 求解线性方程组( float 型) 计算行列式 ...

  7. 线性基+前缀线性基学习笔记

    学习于这个博客 首先,线性基是一个集合,对于任何一个序列一定有至少一个线性基,取线性基中的某些数异或起来一定可以得到原序列中的任何一个数. 线性基三大性质: 1.原序列中的任何一个数都可以由线性基里面 ...

  8. 牛客题霸 [ 集合的所有子集] C++题解/答案

    牛客题霸 [ 集合的所有子集] C++题解/答案 题目描述 现在有一个没有重复元素的整数集合S,求S的所有子集 注意: 你给出的子集中的元素必须按升序排列 给出的解集中不能出现重复的元素 题解: 先s ...

  9. 算法题-----题目、题解、个人算法、个人思考

    算法题-----题目.题解.个人算法.个人思考,项目说明]这里记录算法题目,这里记录:算法题目简单描述,暂存对于这道题的SK_cache(自己的卡点.自己的思路.自己对这道题的理解,自己的疑问.自己对 ...

最新文章

  1. web编程速度大比拼(nodejs go python)(非专业对比)
  2. POJ 2455Secret Milking Machine(二分+网络流之最大流)
  3. 8个主流且实用的Python开发工具推荐
  4. SSIS 学习(2):数据流任务(上)
  5. Android activity启动模式
  6. OpenTSDB使用Grafana的Filters type注解
  7. 微课|中学生可以这样学Python(例8.23):快速排序算法
  8. nginx基于htpasswd安全验证
  9. 258. Move 0s To The End I -- Laicode
  10. Eclipse主题设置
  11. QT之Tcp数据发送测试工具
  12. 随机过程基础1--随机过程与宽平稳
  13. 便携软件制作入门教程及实例
  14. 蓝桥杯李白打酒php,蓝桥杯:李白打酒
  15. 中继链路trunk详解
  16. IT在计算机语言是什么意思,什么是编程语言?编程语言都有哪些?以及主要用途...
  17. Celery介绍——手机短信异步发送
  18. 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0
  19. 好程序员web前端分享用CSS和JS打造一个简单的图片编辑器
  20. ssh访问控制,封杀ip,防止暴力破解

热门文章

  1. 如何播放蓝光电影的XBMC
  2. 网络测试常用的命令-比较ping,tracert和pathping等命令之间的关系
  3. KDJB-802微机继电保护测试仪
  4. 怎样设置视频封面图,快速给视频置入图片
  5. i71165g7和i71260p哪个好
  6. 一些页面自动跳转的实现 转自a href=http://www.blogjava.net/Jcat/archive/2006/11/22/82831.html target=_blankh...
  7. 推荐10款非常优秀的HTML5开发工具
  8. Java高级----List集合、Set集合、Map集合总结
  9. 机器人的避障常用方案
  10. 中国移动首现4G用户净流失,该如何扭转局面?