有\(2^n-1\)個數字,分別是\(1,2,\dots,2^n-1\)。它們具有權值,分別為\(c_1,c_2,\dots,c_\)。
從這些數字中選擇一些數字組成集合\(s\),對於\(1,2,\dots,2^n-1\)中任意乙個數字\(i\),都可以從\(s\)中找到乙個子集,使得子集裡面所有數異或起來為\(i\)。
問:集合\(s\)中所有數之和的最小值為多少?
\(2 \leq n \leq 16\)
線性基模板題。
首先不考慮權值的問題,只考慮集合\(s\)如何得到。這個問題為線性基的基本應用,只需要在插入的過程中,記錄當前元素是否使用了即可。
現在考慮權值,只需要在上面的基礎上,對權值進行排序即可(因為在\(b\)陣列的構造過程中,肯定是優先選擇權值小的數)。
#include #include #include #include using namespace std;
typedef long long ll;
typedef pairpii;
const int n = 20;
int n;
pii a[1 << n];
ll b[n];
ll ans;
void ins(int x, ll val) //插入數字,獲取線性基
else x ^= b[i];}}
}int main()
; }
sort(a + 1, a + (1 << n));
for(int i = 1; i < (1 << n); i ++)
printf("%lld\n", ans);
return 0;
}
元素 線性基,貪心
有n nn塊石頭,每塊石頭有乙個序號和乙個魔力值,你可以使用任意數量的石頭,但你使用的石頭中任意幾塊異或起來不能為0 00,求可得到的最大總魔力值。貪心顯然我們貪心地將val valva l值更大的放在前面插入到線性基中,因此我們只需要對所以物品按val valva l值降序排序即可,然後線性基基本...
裝備購買 線性基 貪心
裝備購買 solution 貪心 線性基。由於線性基能夠錶出的線性空間和原數表出的線性空間相同,所以只需要在高斯消元求線性基的過程中貪心選取 最低的行 向量 即可。code include include include include include define rg register defi...
bzoj 2115 Xor 線性基 貪心
題目傳送門 這是個通往vjudge的蟲洞 這是個通往bzoj的蟲洞 題目大意 問點 1 到點 n 的最大異或路徑。因為重複走一條邊後,它的貢獻會被消去。所以這條路徑中有貢獻的邊可以看成是一條 1 到 n 的簡單路徑加上若干個環。因此可以找任意一條路徑,然後找出所有環扔進線性基跑出最大異或和。但是找出...