zoukankan      html  css  js  c++  java
  • bzoj 2460: [BeiJing2011]元素【线性基+贪心】

    先按魔力值从大到小排序,然后从大到小插入线性基中,如果插入成功就加上这个魔力值
    因为线性基里是没有异或和为0的集合的,所以正确性显然,然后最优性,考虑放进去一个原来没选的,这样为了可行性就要删掉一个,又因为是从大到小加进去的,所以删掉的这个魔力值一定是大于加进去的,所以不优,所以贪心构造的就是最优解

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    const int N=1005;
    int n,ans;
    long long b[65];
    struct qwe
    {
    	int v;
    	long long a;
    }a[N];
    bool cmp(const qwe &a,const qwe &b)
    {
    	return a.v>b.v;
    }
    bool ins(long long x)
    {
    	for(int i=60;i>=0;i--)
    		if(x>>i)
    		{
    			if(!b[i])
    			{
    				b[i]=x;
    				return 1;
    			}
    			x^=b[i];
    			if(!x)
    				return 0;
    		}
    	return 1;
    }
    int main()
    {
    	scanf("%d",&n);
    	for(int i=1;i<=n;i++)
    		scanf("%lld%d",&a[i].a,&a[i].v);
    	sort(a+1,a+1+n,cmp);
    	for(int i=1;i<=n;i++)
    		if(ins(a[i].a))
    			ans+=a[i].v;
    	printf("%d
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    phpExcel常用方法详解 F
    简单的图片变色方法 F
    TCP协议数据包及攻击分析
    你好世界
    团队项目 第一次作业
    NOIP提高组(2018)考试技巧及注意事项
    ACM常用模板数论
    ACM常用模板图论
    ACM常用模板数据结构
    I'm Coming
  • 原文地址:https://www.cnblogs.com/lokiii/p/10014908.html
Copyright © 2011-2022 走看看