有一数组
B
B
B,求满足以下条件的数组
A
A
A的个数
B
[
i
]
=
A
[
i
]
,
O
R
B
[
i
]
=
∑
j
=
1
i
A
[
j
]
B[i]=A[i] ,OR \\B[i]=\sum_{j=1}^{i}A [j]
B[i]=A[i],ORB[i]=j=1∑iA[j]
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j]表示
∑
k
=
1
i
A
[
k
]
=
j
\sum_{k=1}^{i}A[k]=j
∑k=1iA[k]=j的方案数,那么显然有
n
2
log
2
n
n^2\log_{2}^{n}
n2log2n的转移方程
d
p
[
i
]
[
j
]
=
d
p
[
i
−
1
]
[
j
−
b
[
i
]
]
d
p
[
i
]
[
b
[
i
]
]
=
∑
j
=
−
i
n
f
i
n
f
[
j
!
=
0
]
d
p
[
i
−
1
]
[
j
]
dp[i][j]=dp[i-1][j-b[i]]\\dp[i][b[i]]=\sum_{j=-inf}^{inf}[j!=0]dp[i-1][j]
dp[i][j]=dp[i−1][j−b[i]]dp[i][b[i]]=j=−inf∑inf[j!=0]dp[i−1][j]
对于方程二来说其实只需要维护一下前缀总方案数就可以
O
(
1
)
O(1)
O(1)转移
对于方程一也能看出其实是一个整体右移的转移,那么我们只需要维护一下偏移量就可以
O
(
1
)
O(1)
O(1)转移啦