首页 > 代码库 > BZOJ 2460 BeiJing2011 元素 贪心+高斯消元
BZOJ 2460 BeiJing2011 元素 贪心+高斯消元
题目大意:给定一些元素,每个元素有两个值a和b,现在需要选出一些元素,在不存在a值异或和为0的子集的情况下使b之和最大
可以用拟阵证明贪心的正确性(我不会证,同学会)
于是我们将b值排序,从大到小插入
动态维护线性基即可
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 1010 using namespace std; struct abcd{ long long a; int b; friend istream& operator >> (istream& _,abcd &x) { _>>x.a>>x.b; return _; } bool operator < (const abcd &x) const { return b > x.b ; } }a[M]; int n; long long ans,linear_bases[70]; int main() { int i,j; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); for(i=1;i<=n;i++) { for(j=62;~j;j--) if(a[i].a&(1ll<<j) ) { if(!linear_bases[j]) { linear_bases[j]=a[i].a; break; } a[i].a^=linear_bases[j]; } if(a[i].a) ans+=a[i].b; } cout<<ans<<endl; }
BZOJ 2460 BeiJing2011 元素 贪心+高斯消元
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。