三行汉字说清高维前缀和,三行代码写出高维前缀和

发布时间 2023-07-05 13:19:41作者: wiki0922

——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的值