00:00:00
高维前缀和 笔记
你知道学完一个东西不写笔记会有什么后果吗?——直接失忆。
一、高维前缀和
考虑求二维前缀和,除了传统的容斥方法,还可以这样:
cpp
// 考虑第一维
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) // 每个点加上这一维上个点的和
a[i][j] += a[i - 1][j];
// 考虑第二维
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) // 每个点加上这一维上个点的和
a[i][j] += a[i][j - 1];考虑这份代码是在干什么(如注释所示)。
因此,求高维前缀和可以:
- 考虑每一个维度。
- 所有点加上这个维度上个点的信息。
二、SOS DP
1. 子集
对于每一个状态
2. 超集
从前缀和变成了后缀和。
三、刷题总结
这个东西还是要看题目才能理解。
1. AT_arc100_c [ARC100E] Or Plus Max
显然可以将
2. CF165E Compatible Numbers
3. CF449D Jzzhu and Numbers
4. P6442 [COCI 2011/2012 #6] KOŠARE
看数据范围,玩具种类很小,直接对每个箱子有的玩具状压,选出来之后要包含所有的玩具,那么就是选择的箱子按位或后全部是
5. CF1208F Bits And Pieces
考虑从高到低贪心确定答案每一位能否为