p4570 [BJWC2011]元素

题目描述-->p4570 [BJWC2011]元素

题目大意

给定一些矿石的编号与价值,我们想要得到最大的价值和,并且选定物品的编号异或之和不为0.

分析

线性基就不多bb了,来这里->p3812 [模板]线性基

贪心

我们从小到大,选择价值大的矿石,满足异或之和不为零的条件,我们就可以加上它的贡献.

因此我们需要用到sort对价值从小到大排序.

线性基.

这题线性基有什么用?说实话开始我也没想到

我们很容易想到.

如果某个矿石能被使用,那它的编号的二进制下某一位一定是已经出现过的矿石编号中不存在的.(这句话还是仔细研读,应该不难理解,qwq.

这句话简单来讲.对于某一个编号x,我们检验其与之前已选编号时候异或起来为0.

(因为线性基进行插入元素的操作时,我们会对这个元素的大小进行削减是这么说吧.)

因此不难证明用线性基维护是正确的.

因此我们对已经选入的矿石的编号维护线性基.(那这题就裸了.

如果满足条件(异或之和不为0),我们就可以选择它,加上它的价值.

------------------代码-------------------

#include<bits/stdc++.h>
#define int long long
#define IL inline
#define RI register int
using namespace std;
int n,ans,p[64];
struct cod{int idx,w;}rock[1008];
IL bool ccp(const cod&a,const cod&b){return a.w>b.w;}
IL bool ins(int x)
{
    for(RI i=63;i>=0;i--)
    {
        if(x&(1LL<<i))
        {
            if(p[i])
                x^=p[i];//削减操作
            else
            {
                p[i]=x;//如果之前选择的编号的当前一位不存在,而我的存在.
                return true;//即能选择当前编号.
            }
        }
    }
    return false;
}
main()
{
    ios::sync_with_stdio(false);
    cin>>n;
    for(RI i=1;i<=n;i++)
        cin>>rock[i].idx>>rock[i].w;
    stable_sort(rock+1,rock+n+1,ccp);
    for(RI i=1;i<=n;i++)
        if(ins(rock[i].idx))
            ans+=rock[i].w;
    cout<<ans;
}

原文地址:https://www.cnblogs.com/-guz/p/9660890.html

时间: 2024-11-06 21:04:53

p4570 [BJWC2011]元素的相关文章

[BJWC2011]元素

[BJWC2011]元素 题目大意: \(n(n\le1000)\)个物品,每个物品有两个属性:序号\(a_i(a_i\le10^{18})\)和权值\(b_i(b_i\le10000)\).现在从中选取若干个物品,使得序号异或和不为\(0\),求权值和最大值. 思路: 按照权值从大到小排序贪心地构造线性基. 源代码: #include<cstdio> #include<cctype> #include<algorithm> #include<functional

[BJWC2011]元素 线性基

题面 题面 题解 一个方案合法,当且仅当选取的01串凑不出0. 因此就是要使得选取的01串全在线性基内,具体原因可以看这道题:[CQOI2013]新Nim游戏 线性基 要使得魔力值最大,只需要按法力值从大到小,贪心的往线性基中加串就可以了 #include<bits/stdc++.h> using namespace std; #define R register int #define AC 1100 #define LL long long int n; LL ans; LL f[AC];

线性基初探

关于线性基的学习与理解 1.线性基: 若干数的线性基是一组数\(a_1,a_2,...a_n\)其中\(a_x\)的最高位的1在第x位. 通过线性基中元素\(xor\)出的数的值域与原来的数\(xor\)出数的值域相同. 2.线性基的构造法: 对每一个数\(p\)从高位到低位扫,扫到第\(x\)位为1时,若\(a_x\)不存在,则\(a_x=p\)并结束此数的扫描,否则令\(p=pxora_x\). 3.查询: 用线性基求这组数\(xor\)出的最大值:从高往低扫\(a_x\),若异或上\(a_

【HTML5】summary交互元素

1.源码 <!DOCTYPE HTML> <html> <head> <meta charset="UTF-8"/> <title>交互元素summary的使用</title> <style type="text/css"> body{ padding:5px; font-size:14px; } summary{ font-weight:bold; } </style>

【HTML5】用脚本控制交互元素details元素的使用

1.源码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con

jQuery父级以及同级元素查找的实例

父级以及同级元素的查找在使用过程中还是蛮频繁的,下面为大家介绍下jQuery是如何实现的,感兴趣的朋友可以参考下 jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(".class") jQuery.parents(expr),类似于jQuery.parents(expr),但是是查找所有祖先元素,不限于父元素 jQuery.children(

移动端fixed的元素抖动的问题

工作中发现,给一个元素添加fixed属性,让它固定在窗口某个位置,直接加fposition:fixed属性就能实现这个效果: 在安卓手机上的效果都比较好,但是ios系统的个别浏览器兼容性就不好,如QQ浏览器.UC浏览器.360浏览器(这几个是ios最容易出问题的浏览器): 问题:当用户快速滑动页面的到时候,fixed的元素就会在窗口跳动或者抖动,非常影响用户体验 下面提供几个解决方案,仅供参考,如有更好更有效的解决办法,欢迎留言交流探讨! 方法一: 给body设置高度100% body,html

微信小程序布局之行内元素和块级元素

元素按照显示方式主要可以分为块级元素和行内元素,元素的显示方式由display属性控制. 块级元素特点总结: 1.总是在新行上开始 2.宽度的默认为width+margin-left+margin-right+padding-left+padding-right刚好等于父级元素的内容区域宽度,即父元素的width.当设定新的宽度,如果宽度是100%,并且padding.margin不为零,导致块级元素宽度溢出父元素 3.盒子模型的高度默认由内容决定 4.盒子模型中高度.宽度和内外边距都是可控制

页面滚动图片等元素动态加载插件jquery.scrollLoading.js

如果一个网页很长,那么该页面的加载时间也会相应的较长.而这里给大家介绍的这个jQuery插件scrollLoading的作用则是,对页面元素进行动态加载,通俗的说就是滚到哪就加载到哪,屏幕以下看不见的就不用加载了.这样还可以在一定程度上节省服务器资源.该插件作者的网页将该插件的功能和使用方法描述的非常详细,这里把最一般最普遍的使用情况给大家展现一下. 插件作者:http://www.zhangxinxu.com/ 首先我们需要加载jQuery库和本插件js文件. (jquery.scrollLo