zoukankan      html  css  js  c++  java
  • [BJWC2011] 元素

    Description

    (n) 个元素,每个元素有个序号和一个值,一个元素可以选择当且尽当其序号与已选元素序号的异或和不为 (0),求你可选择的元素值和的最大值。

    Solution

    容易发现,要求的就是值和最大的(序号)线性无关组

    考虑贪心,将值大的放在前面,然后能放入线性基就放入线性基即可

    #include <bits/stdc++.h>
    using namespace std;
    
    #define int long long
    const int N = 10005;
    
    struct linearbase {
        int a[64];
        bool insert(int k) {
            for(int j=63; j>=0; --j)
                if((k>>j)&1ll)
                    if(a[j]==0) {a[j]=k;return true;}
                    else k^=a[j];
            return false;
        }
    } l;
    
    int n;
    
    struct ks {
        int x,y;
        bool operator < (const ks &b) {
            return y>b.y;
        }
    } a[N];
    
    signed main() {
        ios::sync_with_stdio(false);
        cin>>n;
        for(int i=1;i<=n;i++) {
            int x,y;
            cin>>x>>y;
            a[i]={x,y};
        }
        int ans=0;
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++) {
            if(l.insert(a[i].x)) ans+=a[i].y;
        }
        cout<<ans;
    }
    
    
  • 相关阅读:
    设计模式-观察者模式
    ps一寸照的编辑
    ps剪切蒙版的使用
    ps扣头发
    mysql索引优化
    ES6 $ ES5
    sping-mybatis集成
    多线程--volatile
    eclipse.exe打开是报错
    Spring Aop 详解二
  • 原文地址:https://www.cnblogs.com/mollnn/p/13151723.html
Copyright © 2011-2022 走看看