题解:
贪心+线性基。
先按贡献从小到大排序,然后对于每个矿石扔到线性基中查找。
找不到就加上贡献,推进线性基。
代码:
#include#include #include using namespace std;typedef long long ll;const int N = 1050;template inline void read(T&x){ T f = 1,c = 0;char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){c=c*10+ch-'0';ch=getchar();} x = f*c;}int n;struct Pair{ ll x; int y;}p[N];bool cmp(Pair a,Pair b){ return a.y>b.y;}struct lb{ ll c[70]; bool find(ll k) { for(int i=63;i>=0;i--)if(k&(1ll< =0;i--)if(k&(1ll<