问 1 → n 1\rightarrow n 1→n的所有排列的逆序数的和
解:
设
f
(
i
,
j
)
f(i,j)
f(i,j)为
1
→
i
1\rightarrow i
1→i逆序数为
j
j
j的排列的方案数,
s
u
m
(
i
)
sum(i)
sum(i)为
1
1
1~
i
i
i的所有排列的逆序数的和。则有公式
- s u m ( i ) = ∑ j = 0 ( i 2 ) f ( i , j ) ∗ j ( 1 ) sum(i)=\sum_{j=0}^{{i\choose 2}}f(i,j)*j\quad (1) sum(i)=∑j=0(2i)f(i,j)∗j(1)
- i ! = ∑ j = 0 ( i 2 ) f ( i , j ) ( 2 ) i!=\sum_{j=0}^{{i\choose 2}}f(i,j)\quad (2) i!=∑j=0(2i)f(i,j)(2)
考虑 i i i到 i + 1 i+1 i+1的 d p dp dp过程,初始
- ∀ k ∈ [ 0 , ( i + 1 2 ) ] \forall k\in[0,{i+1\choose 2}] ∀k∈[0,(2i+1)], f ( i + 1 , k ) = 0 f(i+1,k)=0 f(i+1,k)=0
- s u m ( i + 1 ) = ∑ k = 0 ( i + 1 2 ) f ( i + 1 , k ) ∗ k = 0 ( 3 ) sum(i+1)=\sum_{k=0}^{{i+1\choose 2}}f(i+1,k)*k=0\quad (3) sum(i+1)=∑k=0(2i+1)f(i+1,k)∗k=0(3)
对于一个
1
→
i
1\rightarrow i
1→i的逆序数为
j
j
j的排列,当把
i
+
1
i+1
i+1考虑进去时,设逆序数的增量
Δ
\Delta
Δ,有
0
≤
Δ
≤
i
0\le\Delta\le i
0≤Δ≤i。
- 比如 3 , 1 , 2 3,1,2 3,1,2,把 4 4 4放进去
- 4 , 3 , 1 , 2 \quad4,3,1,2 4,3,1,2, Δ = 3 \Delta=3 Δ=3
- 3 , 4 , 1 , 2 \quad3,4,1,2 3,4,1,2, Δ = 2 \Delta=2 Δ=2
- 3 , 1 , 4 , 2 \quad3,1,4,2 3,1,4,2, Δ = 1 \Delta=1 Δ=1
- 3 , 1 , 2 , 4 \quad3,1,2,4 3,1,2,4, Δ = 0 \Delta=0 Δ=0
也就意味着,一个
1
→
i
1\rightarrow i
1→i的逆序数为
j
j
j的排列能够变成
1
→
i
+
1
1\rightarrow i+1
1→i+1的逆序数为
k
(
j
≤
k
≤
j
+
i
)
k(j\le k\le j+i)
k(j≤k≤j+i)的排列。即
f
(
i
,
j
)
f(i,j)
f(i,j)会贡献给
f
(
i
+
1
,
k
)
(
j
≤
k
≤
j
+
i
)
f(i+1,k)(j\le k\le j+i)
f(i+1,k)(j≤k≤j+i),让
f
(
i
+
1
,
k
)
(
j
≤
k
≤
j
+
i
)
f(i+1,k)(j\le k\le j+i)
f(i+1,k)(j≤k≤j+i)增加
f
(
i
,
j
)
f(i,j)
f(i,j)。那么根据式子
(
3
)
(3)
(3),
s
u
m
(
i
+
1
)
sum(i+1)
sum(i+1)增加
f
(
i
,
j
)
∗
k
(
j
≤
k
≤
j
+
i
)
f(i,j)*k(j\le k\le j+i)
f(i,j)∗k(j≤k≤j+i),再考虑
1
→
i
1\rightarrow i
1→i的所有逆序数
j
j
j。
s
u
m
(
i
+
1
)
=
∑
j
=
0
(
i
2
)
∑
k
=
j
j
+
i
f
(
i
,
j
)
∗
k
=
∑
j
=
0
(
i
2
)
f
(
i
,
j
)
∗
(
2
j
+
i
)
(
i
+
1
)
2
=
i
+
1
2
(
2
∑
j
=
0
(
i
2
)
f
(
i
,
j
)
∗
j
+
∑
j
=
0
(
i
2
)
f
(
i
,
j
)
∗
i
)
=
(
i
+
1
)
∑
j
=
0
(
i
2
)
f
(
i
,
j
)
∗
j
+
(
i
+
1
)
∗
i
2
∑
j
=
0
(
i
2
)
f
(
i
,
j
)
根
据
(
1
)
(
2
)
=
(
i
+
1
)
s
u
m
(
i
)
+
i
∗
i
!
∗
(
i
+
1
)
2
=
(
i
+
1
)
s
u
m
(
i
)
+
i
∗
(
i
+
1
)
!
2
\begin{aligned} sum(i+1)&=\sum_{j=0}^{{i\choose 2}}\sum_{k=j}^{j+i}f(i,j)*k\\ &=\sum_{j=0}^{{i\choose 2}}f(i,j)*\frac{(2j+i)(i+1)}{2}\\ &=\frac{i+1}{2}(2\sum_{j=0}^{{i\choose 2}}f(i,j)*j+\sum_{j=0}^{{i\choose 2}}f(i,j)*i)\\ &=(i+1)\sum_{j=0}^{{i\choose 2}}f(i,j)*j+\frac{(i+1)*i}{2}\sum_{j=0}^{i\choose 2}f(i,j)\quad 根据(1)(2)\\ &=(i+1)sum(i)+\frac{i*i!*(i+1)}{2}\\ &=(i+1)sum(i)+\frac{i*(i+1)!}{2}\\ \end{aligned}
sum(i+1)=j=0∑(2i)k=j∑j+if(i,j)∗k=j=0∑(2i)f(i,j)∗2(2j+i)(i+1)=2i+1(2j=0∑(2i)f(i,j)∗j+j=0∑(2i)f(i,j)∗i)=(i+1)j=0∑(2i)f(i,j)∗j+2(i+1)∗ij=0∑(2i)f(i,j)根据(1)(2)=(i+1)sum(i)+2i∗i!∗(i+1)=(i+1)sum(i)+2i∗(i+1)!
得到递推式
s
u
m
(
i
+
1
)
=
(
i
+
1
)
s
u
m
(
i
)
+
i
∗
(
i
+
1
)
!
2
i
≥
1
sum(i+1)=(i+1)sum(i)+\frac{i*(i+1)!}{2}\quad i\ge 1
sum(i+1)=(i+1)sum(i)+2i∗(i+1)!i≥1
迭代一次
s
u
m
(
i
+
1
)
=
(
i
+
1
)
(
i
∗
s
u
m
(
i
−
1
)
+
(
i
−
1
)
∗
i
!
2
)
+
i
∗
(
i
+
1
)
!
2
s
u
m
(
i
+
1
)
=
(
i
+
1
)
∗
i
∗
s
u
m
(
i
−
1
)
+
(
i
−
1
)
∗
(
i
+
1
)
!
2
+
i
∗
(
i
+
1
)
!
2
\begin{aligned} sum(i+1)&=(i+1)(i*sum(i-1)+\frac{(i-1)*i!}{2})+\frac{i*(i+1)!}{2}\\ sum(i+1)&=(i+1)*i*sum(i-1)+\frac{(i-1)*(i+1)!}{2}+\frac{i*(i+1)!}{2}\\ \end{aligned}
sum(i+1)sum(i+1)=(i+1)(i∗sum(i−1)+2(i−1)∗i!)+2i∗(i+1)!=(i+1)∗i∗sum(i−1)+2(i−1)∗(i+1)!+2i∗(i+1)!
多迭代几次会发现
s
u
m
(
i
+
1
)
=
s
u
m
(
1
)
∗
∏
j
=
2
i
+
1
j
+
(
i
+
1
)
!
2
∑
j
=
1
i
j
s
u
m
(
1
)
=
0
=
i
∗
(
i
+
1
)
∗
(
i
+
1
)
!
4
s
u
m
(
n
)
=
n
(
n
−
1
)
n
!
4
\begin{aligned} sum(i+1)&=sum(1)*\prod_{j=2}^{i+1}j+\frac{(i+1)!}{2}\sum_{j=1}^{i}j\quad sum(1)=0\\ &=\frac{i*(i+1)*(i+1)!}{4}\\ sum(n)&=\frac{n(n-1)n!}{4}\\ \end{aligned}
sum(i+1)sum(n)=sum(1)∗j=2∏i+1j+2(i+1)!j=1∑ijsum(1)=0=4i∗(i+1)∗(i+1)!=4n(n−1)n!