Increasing Subsequence | 2021牛客暑期多校训练营1 长度为
n
n
n 的数组,第
i
i
i 个数为
a
i
a_i
ai , 且这个数组是一个
[
1
,
n
]
[1,n]
[1,n] 的全排列
A
l
i
c
e
Alice
Alice 先等概率随机选择一个位置
x
x
x , 然后
B
o
b
Bob
Bob 也等概率随机选择一个位置
y
y
y ,但要求
a
y
>
a
x
a_y>a_x
ay>ax 然后
A
l
i
c
e
Alice
Alice 先,轮流两人操作:
假设 ta 上一步选择的下标为
x
x
x ,对方上一步选择的下标为
y
y
y 那么 ta 必须选择一个位置
k
k
k , 满足
k
>
x
k > x
k>x 且
a
k
>
a
y
a_k>a_y
ak>ay 多有多个满足的位置,那么 ta 会等概率随机选择一个 若没有满足的位置,那么结束 问你从开始到结束,轮次的期望值
1
≤
n
≤
5000
1\le n\le 5000
1≤n≤5000
思路
看到期望,还有数据范围,肯定会去想一个 期望的
d
p
dp
dp 设
d
p
[
i
]
[
j
]
dp[i][j]
dp[i][j] 表示
A
l
i
c
e
Alice
Alice 拿了下标
i
i
i ,
B
o
b
Bob
Bob 拿了下标
j
j
j ,到结束的轮次的期望 我们根据
a
i
、
a
j
a_i、a_j
ai、aj 的大小关系可以自己判断下一步是谁拿数字 假设
a
i
>
a
j
a_i>a_j
ai>aj ,那么就是
B
o
b
Bob
Bob 拿,我们自己可以写出转移:
d
p
[
i
]
[
j
]
=
1
c
∑
k
>
j
a
k
>
a
i
d
p
[
i
]
[
k
]
+
1
dp[i][j]=\frac{1}{c}\sum_{\underset{a_k>a_i}{k>j}}dp[i][k] + 1
dp[i][j]=c1ak>aik>j∑dp[i][k]+1 假设
a
i
<
a
j
a_i<a_j
ai<aj,那么就是
A
l
i
c
e
Alice
Alice 拿:
d
p
[
i
]
[
j
]
=
1
c
∑
k
>
i
a
k
>
a
j
d
p
[
k
]
[
j
]
+
1
dp[i][j]=\frac{1}{c}\sum_{\underset{a_k>a_j}{k>i}}dp[k][j] + 1
dp[i][j]=c1ak>ajk>i∑dp[k][j]+1 这里
c
c
c 就是有多少个
k
k
k 满足以上要求 但是这样直接去做当然是
O
(
N
3
)
O(N^3)
O(N3) 的,直接
T
L
E
\color{red}{TLE}
TLE 当时我用开
4
n
4n
4n 个树状数组去做,但是
O
(
N
2
log
N
×
c
)
O(N^2\log N\times c)
O(N2logN×c) 也
T
L
E
\color{red}{TLE}
TLE 实际上,我们可以优化到
O
(
N
2
)
\color{cyan}{O(N^2)}
O(N2)
两个状态维度都是必须要的,也就是说我们只能去
O
(
1
)
O(1)
O(1) 获得后面的那个求和 因为我们写代码肯定是这样:
对于
B
o
b
Bob
Bob 拿的情况,我们需要快速求出
∑
k
>
j
a
k
>
a
i
d
p
[
i
]
[
k
]
\sum_{\underset{a_k>a_i}{k>j}}dp[i][k]
∑ak>aik>jdp[i][k] 因为我们就是
j
j
j 从
n
n
n 倒序枚举到现在的,所以我们只要对当前的
i
i
i ,记录有多少个数满足
a
k
>
a
i
a_k>a_i
ak>ai,并且把他们的
d
p
[
i
]
[
k
]
dp[i][k]
dp[i][k] 的和记录下来,就可以
O
(
1
)
O(1)
O(1) 拿到了 大概就是这样,很好理解:
对于
A
l
i
c
e
Alice
Alice 拿的情况,我们需要快速求出
∑
k
>
i
a
k
>
a
j
d
p
[
k
]
[
j
]
\sum_{\underset{a_k>a_j}{k>i}}dp[k][j]
∑ak>ajk>idp[k][j] 因为我们的
i
i
i 也是从
n
n
n 倒序枚举到现在的,就默认满足了
k
>
i
k>i
k>i 对于所有
a
k
>
a
j
a_k>a_j
ak>aj 的情况,我们需要记录有多少次满足,以及
d
p
[
k
]
[
j
]
dp[k][j]
dp[k][j] 的和 这里
j
j
j 有很多种值,那么我们干脆开一个数字
c
n
t
[
j
]
、
s
u
m
[
j
]
cnt[j]、sum[j]
cnt[j]、sum[j] 存对应满足的内容