高维前缀和

普通求前缀和,是容斥意义下去做的

而如果我们用这种思路带向高维,则其复杂度是\(O(n2^d)\,\,\,d\)是维数 的

高维前缀和可以做到 \(O(nd)\)

具体方法就是对每一位分别做前缀和,然后再拼起来就可以了

画个图

大概……就是这样吧

这个东西可以代替一部分的枚举子集,好像还能优化 DP ,但我还没见到过,见到了再写

代码也挺好写的,两层循环,外面枚举现在到了第几维了,里面进行前缀和就可以了

贴个二进制下的板子

for(int j = 0; j < n; j++) 
    for(int i = 0; i < 1 << n; i++)
        if(i >> j & 1) f[i] += f[i ^ (1 << j)];

其实主要是因为今天要写FMT和FWT才现学的这玩意儿

posted @ 2023-01-29 20:44  颈流推进  阅读(46)  评论(0)    收藏  举报