#P8859. 冒泡排序

    ID: 7996 Type: RemoteJudge 1000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>动态规划,dp贪心洛谷原创O2优化组合数学洛谷月赛

冒泡排序

题目描述

有一个值域下标均为 1n1\sim n 的排列或圆排列 AA,定义 f(A)f(A) 为将 AA 升序排序所需的最小操作次数。

每次操作中,你可以选择一个元素并向前冒泡若干次,一次冒泡定义为:若这个元素小于前一个元素,则可以交换它与前一个元素。当某次无法冒泡时,这次操作立即停止。否则可以连续冒泡任意次。

比如有排列 [3,5,2,1,4][3,5,2,1,4],一次操作可以选择元素 11 ,得到排列 [3,5,1,2,4],[3,1,5,2,4][3,5,1,2,4],[3,1,5,2,4][1,3,5,2,4][1,3,5,2,4]

若有圆排列 [2,1,4,3][2,1,4,3],选择元素 11 后可以得到圆排列 [1,2,4,3],[3,2,4,1][1,2,4,3],[3,2,4,1][3,2,1,4][3,2,1,4] 。注意到圆排列中第 11 个元素的前一个元素为第 nn 个元素。

排列或圆排列被升序排序,当且仅当对于所有  2in\space 2 \leq i \leq n,元素 ii 的前一个元素为元素 i1i-1

给定 n,k,typen,k,type,你需要:

  • type=1type=1 时求有多少长为 nn 的排列 AA 满足 f(A)=kf(A)=k
  • type=2type=2 时求有多少长为 nn 的圆排列 AA 满足 f(A)=kf(A)=k

答案对 109+710^9+7 取模。

输入格式

输入一行三个正整数 n,k,typen,k,type,具体含义见题目描述。

输出格式

输出一行一个整数,表示答案对 109+710^9+7 取模后的结果。

4 2 1
11
5 2 2
14
50 10 1
808620624
50 10 2
578144115

提示

【样例解释 #1】

有如下合法排列:

  1. [1,4,2,3][1,4,2,3]
  2. [1,4,3,2][1,4,3,2]
  3. [2,1,4,3][2,1,4,3]
  4. [2,4,1,3][2,4,1,3]
  5. [2,4,3,1][2,4,3,1]
  6. [3,1,2,4][3,1,2,4]
  7. [3,1,4,2][3,1,4,2]
  8. [3,2,1,4][3,2,1,4]
  9. [3,2,4,1][3,2,4,1]
  10. [3,4,1,2][3,4,1,2]
  11. [3,4,2,1][3,4,2,1]

【样例解释 #2】

有如下合法圆排列:

  1. [1,2,5,3,4][1,2,5,3,4]
  2. [1,2,5,4,3][1,2,5,4,3]
  3. [1,3,2,5,4][1,3,2,5,4]
  4. [1,3,5,2,4][1,3,5,2,4]
  5. [1,3,5,4,2][1,3,5,4,2]
  6. [1,4,2,3,5][1,4,2,3,5]
  7. [1,4,2,5,3][1,4,2,5,3]
  8. [1,4,3,2,5][1,4,3,2,5]
  9. [1,4,3,5,2][1,4,3,5,2]
  10. [1,4,5,3,2][1,4,5,3,2]
  11. [1,5,2,4,3][1,5,2,4,3]
  12. [1,5,3,2,4][1,5,3,2,4]
  13. [1,5,3,4,2][1,5,3,4,2]
  14. [1,5,4,2,3][1,5,4,2,3]

需要注意的是,我们认为 [1,2,5,3,4][1,2,5,3,4][2,5,3,4,1][2,5,3,4,1] 等是同一个圆排列。

也就是我们认为两个圆排列不同,当且仅当存在一个 2in2 \leq i \leq n,满足两个圆排列中元素 ii 的前一个元素不同。

【数据范围】

测试点编号 nn \leq kk \leq type=type=
121 \sim 2 77 11
343 \sim 4 22
565 \sim 6 1515 11
787 \sim 8 22
9129 \sim 12 5050 11
131613 \sim 16 22
1717 500500 1010 11
1818 22
1919 500500 11
2020 22

对于所有数据,1k<n5001 \leq k < n \leq 5001type21 \leq type \leq 2