洛谷 P4570 BJWC2011 元素 線性基

2021-08-23 12:31:23 字數 1738 閱讀 5494

題目描述

相傳,在遠古時期,位於西方大陸的 magic land 上,人們已經掌握了用魔法礦石煉製法杖的技術。那時人們就認識到,乙個法杖的法力取決於使用的礦石。

例如,使用兩個同樣的礦石必將發生「魔法抵消」,因為這兩種礦石的元素序號相同,異或起來為零。並且人們有了測定魔力的有效途徑,已經知道了:合成出來的法杖的魔力等於每一種礦石的法力之和。人們已經測定了現今發現的所有礦石的法力值,並且通過實驗推算出每一種礦石的元素序號。

現在,給定你以上的礦石資訊,請你來計算一下當時可以煉製出的法杖最多有多大的魔力。

輸入輸出格式

輸入格式:

第一行包含乙個正整數n,表示礦石的種類數。

接下來 nn 行,每行兩個正整數nu

mber

i num

beri

和magici

m ag

ic

i,表示這種礦石的元素序號 和魔力值。

輸出格式:

僅包一行,乙個整數代表最大的魔力值。

輸入輸出樣例

輸入樣例#1:

3 1 10

2 20

3 30

輸出樣例#1:

50 說明

樣例解釋

由於有「魔法抵消」這一事實,每一種礦石最多使用一塊。

如果使用全部三種礦石,由於三者的元素序號異或起來: 1x

or2x

or3=

0 1xo

r2xo

r3=0

,則會發生魔法抵消,得不到法杖。

可以發現,最佳方案是選擇後兩種礦石,法力為 20+

30=50 20+30

=50

。資料範圍

對於全部的資料:n≤

1000,n

umbe

ri≤10

18,ma

gici

≤104 n

≤1000,n

umbe

ri≤10

18,ma

gici

≤104。

分析: 從n

n

數中選出某些數,使他們中不能選擇出若干數異或和為

0' role="presentation" style="position: relative;">0

0,每個石頭有權值。

顯然就是乙個最大線性無關組。

直接從大到小排序,然後把序號插入線性基。

**:

#include 

#include

#include

#define ll long long

const

int maxn=1e3+7;

const

int maxp=63;

using

namespace

std;

int n;

ll a[maxp+2];

ll bit[maxp+2],ans;

struct nodeb[maxn];

bool cmp(node x,node y)

int push(ll x)

}

if (!x) return

0; a[c]=x;

for (int i=1;i<=maxp;i++)

return1;}

int main()

printf("%lld",ans);

}

P4570 BJWC2011 元素題解

相傳,在遠古時期,位於西方大陸的 magic land 上,人們已經掌握了用魔法礦石煉製法杖的技術。那時人們就認識到,乙個法杖的法力取決於使用的礦石。例如,使用兩個同樣的礦石必將發生 魔法抵消 因為這兩種礦石的元素序號相同,異或起來為零。並且人們有了測定魔力的有效途徑,已經知道了 合成出來的法杖的魔...

線性基 P4570 BJWC2011 元素

線性基 p4570 bjwc2011 元素 線性基裸題,雖然說是比較裸的題目,但是呢,我才開始學這個,還不知道線性基到底是做什麼的,只知道它和異或有關係,可以求出乙個序列的異或值最大,異或值最小和異或值第k大。這個題目呢有一點點貪心,首先要貪心的考慮取最大值,然後判斷能不能放進去,後面的數字能放進去...

P4570 BJWC2011 元素 線性基上貪心

n個物品,有編號和價值兩個屬性,如果多個物品之間編號異或為0,那麼他們就會消失。求乙個子集,使得總價值最大。根據線性基的性質 假設我有3個物品的編號異或為0,那麼這三個物品無論以什麼樣的順序插入線性基,最後乙個一定是無法插入的,那麼有個顯而易見的貪心策略 把物品按價值降序排序,如果乙個物品能插入線性...