[JSOI2015] 子集选取
题目描述
给定
n
n
n 个元素的集合
S
=
{
1
,
2
,
⋯
,
n
}
S= \left\{1,2,\cdots,n \right\}
S={1,2,⋯,n} 和整数 $ k$,现在要从
S
S
S 中选出若干子集
A
i
,
j
(
A
⊆
S
A_{i,j}\ (A \subseteq S
Ai,j (A⊆S,
1
≤
j
≤
i
≤
k
)
1 \le j \le i \le k)
1≤j≤i≤k) 排成下面所示边长为
k
k
k 的三角形(因此总共选出了
1
2
k
(
k
+
1
)
\frac{1}{2} k(k+1)
21k(k+1) 个子集)。
A
1
,
1
A
2
,
1
A
2
,
2
A
3
,
1
A
3
,
2
A
3
,
3
⋮
⋮
⋮
⋱
A
k
,
1
A
k
,
2
A
k
,
3
⋯
A
k
,
k
\begin{matrix} A_{1,1}\\ A_{2,1}&A_{2,2}\\ A_{3,1}&A_{3,2}&A_{3,3}\\ \vdots&\vdots&\vdots&\ddots\\ A_{k,1}&A_{k,2}&A_{k,3}&\cdots&A_{k,k} \end{matrix}
A1,1A2,1A3,1⋮Ak,1A2,2A3,2⋮Ak,2A3,3⋮Ak,3⋱⋯Ak,k
此外,JYY 对选出的子集之间还有额外的要求:选出的这些子集必须满足
A
i
,
j
⊆
A
i
,
j
−
1
A_{i,j} \subseteq A_{i,j-1}
Ai,j⊆Ai,j−1 且
A
i
,
j
⊆
A
i
−
1
,
j
A_{i,j} \subseteq A_{i-1,j}
Ai,j⊆Ai−1,j。
JYY 想知道,求有多少种不同的选取这些子集的方法。因为答案很大,JYY 只关心输出答案模
1
,
000
,
000
,
007
1{,}000{,}000{,}007
1,000,000,007 的值。
对于两种选取方案 A = { A 1 , 1 , A 2 , 1 , ⋯ , A k , k } A = \left\{ A_{1,1} , A_{2,1} ,\cdots, A_{k,k} \right\} A={A1,1,A2,1,⋯,Ak,k} 和 B = { B 1 , 1 , B 2 , 1 , ⋯ , B k , k } B = \left\{ B_{1,1} , B_{2,1} ,\cdots, B_{k,k} \right\} B={B1,1,B2,1,⋯,Bk,k} 只要存在 i , j i,j i,j 满足 A i , j ≠ B i , j A_{i,j} \neq B_{i,j} Ai,j=Bi,j,我们就认为 A A A 和 B B B 是不同的方案。
输入格式
输入包含一行两个整数 n n n 和 k k k。
输出格式
一行一个整数,表示不同方案数目模 1 , 000 , 000 , 007 1,000,000,007 1,000,000,007 的值。
样例 #1
样例输入 #1
2 2
样例输出 #1
16
提示
对于 100 % 100\% 100% 的数据, 1 ≤ n 1 \le n 1≤n, k ≤ 1 0 9 k \le 10^9 k≤109。
Scratch实现
后续
接下来我会不断用scratch来实现信奥比赛中的算法题、Scratch考级编程题实现、白名单赛事考题实现,感兴趣的请关注,我后续将继续分享相关内容