三行汉字说清高维前缀和,三行代码写出高维前缀和
——whk时突然发现高维前缀和就是暴力前缀和,震惊0922
首先考虑二维空间里的前缀和,很明显就是横着对每一行做一遍,再竖着对每一列做一遍。
三维空间也很简单,横着做一遍纵着做一遍竖着做一遍。
推广到 \(n\) 维,枚举每一维依次做一遍就好,只不过状压了,代码:
for (int i = 0; i < n; i++) //依次枚举每一维
for (int S = 0; S < (1 << n); S++) //枚举每个坐标
if ((S >> i) & 1) a[S] += a[S - (1 << i)]; //假如该维坐标是0则不用变化,是1则加上该维坐标为0的值