链接 :https://www.lydsy.com/JudgeOnline/problem.php?id=2460
思路 :线性基不唯一,所以排序 进行贪心选择,价值最大的线性基,
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 123
ll n,ans,p[maxn];
struct node
{
ll a,b;
bool operator<(const node &c)const
{
return b>c.b;
}
} ss[maxn];
void getji(ll x,int id)
{
for(int i=62; i>=0; i--)
{
if(!(x>>(ll)i))
continue;
if(!p[i])
{
p[i]=x;
break;
}
x^=p[i];
}
if(x!=0)ans+=ss[id].b;
}
int main()
{
scanf("%lld",&n);
for(int i=1; i<=n; i++)
scanf("%lld%lld",&ss[i].a,&ss[i].b);
sort(ss+1,ss+n+1);
for(int i=1; i<=n; i++)
getji(ss[i].a,i);
printf("%lld\n",ans);
return 0;
}
本文详细解析了线性基贪心算法的实现过程,通过C++代码展示了如何对输入数据进行排序并进行贪心选择,以找到价值最大的线性基。适用于算法竞赛和数据结构学习。
1120

被折叠的 条评论
为什么被折叠?



