Description
给定序列
a1,...,an
,求序列
b1,...,bn
满足
bi=Σaj
其中
j & i = j
1≤n≤20
Solution
P.S. 对于一个
n
维数列,每一维分别有
FWT
void ftw(int left, int rght){
int mid = (left + rght) >> 1;
fwt(left, mid);
fwt(mid + 1, rght);
// …忘了
}
另一种实现
for(int i = 0; i < n; ++i)
for(int j = 1; j <= (1 << n); ++j)
if(j & (1 << i) == (1 << i))
a[j] += a[j^(1<<i)]; // 此时a[j^(1<<i)]记录的是枚举j中0...(i-1)位有1的位置分别为0/1的和