能量分组(partition)

题目描述

DAMON THRONE\text{DAMON THRONE}nn 点训练能量,需要把这些能量分配给 kk 个训练小组。

ii 个训练小组获得的能量为 xix_i,要求 x1+x2++xk=nx_1+x_2+\cdots+x_k=n,并且每个小组至少获得 11 点能量,也就是 xi1x_i\ge1

为了避免把相同的分配方案重复计算,规定:

x1x2xkx_1\le x_2\le\cdots\le x_k

请你计算一共有多少种不同的能量分配方案。

由于答案可能很大,请对 109+710^9+7 取模。

输入格式

输入一行,包含两个整数 n,kn,k,分别表示总能量和训练小组数量。

输出格式

输出一行一个整数,表示不同分配方案的数量对 109+710^9+7 取模后的结果。

输入输出样例 #1

输入 #1

7 3

输出 #1

4

样例解释 #1

满足条件的分配方案共有:

1+1+5=71+1+5=7 1+2+4=71+2+4=7 1+3+3=71+3+3=7 2+2+3=72+2+3=7

因此答案为 44

输入输出样例 #2

输入 #2

5 2

输出 #2

2

样例解释 #2

满足条件的分配方案为:

1+4=51+4=5 2+3=52+3=5

因此答案为 22

输入输出样例 #3

输入 #3

4 5

输出 #3

0

样例解释 #3

每个小组至少需要获得 11 点能量。

44 点能量分配给 55 个小组无法满足要求,因此答案为 00

数据范围与约定

对于所有测试数据,保证:

1n,k10001\le n,k\le1000
测试点 分值 nn kk 特殊性质
121\sim2 1010 20\le20
343\sim4 2020 100\le100 A\text{A}
565\sim6 500\le500 B\text{B}
787\sim8 1000\le1000 C\text{C}
9109\sim10 3030

特殊性质 A\text{A}:保证 k=2k=2

特殊性质 B\text{B}:保证 nkn\ge k

特殊性质 C\text{C}:保证 n=kn=k