单点时限: 2.0 sec
内存限制: 256 MB
D 维的帕斯卡金字塔,是一个具有如下定义的函数:
C(x1,x2,…,xD)={1,xi=0,∀1≤i≤D 0,xi<0,∃1≤i≤D C(x1−1,x2,…,xD)+C(x1,x2−1,…,xD) +…+C(x1,x2,…,xD−1),otherwise
我们定义高度为 H 的金字塔,为所有点满足约束条件 ∀1≤i≤D,0≤xi<H∧x1+x2+…+xD≤H−1 的金字塔。该金字塔的底层,为其中满足 x1+x2+…+xD=H 的点。
为了方便理解,下面解释 D=2 和 D=3 时的特例。
帕斯卡三角形,又称杨辉三角,是帕斯卡金字塔在 D=2 时的特例。取 H=5,可得下面的情况:
其中加粗的部分是金字塔的底层。
三维的情况略复杂一些,涉及三个变量:x,y,z,同样取 H=5。
以 x=1,y=2,z=1 为例,(1,2,1) 的值是 (0,2,1),(1,1,1) 和 (1,2,0) 的和,也就是 6+3+3=12。金字塔的底层是满足 x+y+z=4 的部分,即加粗的部分。
本题的任务是要对给定的 D 和 H,输出帕斯卡金字塔底层的函数值形成的集合,即:C(x1,…,xD)|0≤xi<H∧∑ixi=H−1。
一行两个整数,D,H (2≤D<32,1≤H<32)。
将集合中的数从小到大输出出来,一行一个整数,不带重复。输入保证输出结果都是小于 263 的正整数。
2 5
1 4 6
3 5
1 4 6 12