一个正整数 n 的 (strict) composition 是把 n 写成一个正整数数列的和的形式。
举例,正整数 4 可以拆分成
一共 8 种 composition 。注意顺序不同是有所谓的。
如何数一个正整数 n 有多少种 composition 呢?首先,一个正整数 n 可以变成 n 个 1 相加的形式。所以,我们可以先写出一个带有 n 个 1 的数列:
1 _ 1 _ 1 _ 1 _ 1 _ 1 _ 1 _ ... 1 _ 1 _ 1 _ 1
中间的空格保留留空。在空格中我们可以填入逗号「,」或者加号「+」。填入不同的逗号或者加号,我们就会组成不同的 composition 。所以,问题变成了有多少种方式去填入逗号。如果逗号的位置确定了,加号的位置也就会跟着确定。在这里,假设我们要把 n 分成 k 个部分,那么我们就需要填入 k-1 个逗号。我们现在知道一共有 n-1 个空格可以填。所以,一共有
如果把 0 也算做一个部分,那么我们叫它 weak composition 。我们不能定义一个正整数 n 一共有多少种 weak composition ,因为可以有无限多个 0 相加;但是我们能得知当把 n 分成 k 个部分的时候,一共有多少种 weak composition 。例如,当 n = 4 的时候,如果把 4 分成 2 个部分,那么一共有 5 种 weak composition ,如下:
如何得知当把一个正整数 n 拆分成 k 个部分的时候有多少种 weak composition ?首先,把 n 想象成 n 个 1 ,如果要把 n 个 1 组成的数列分成 k 个部分,那么我们需要有 k-1 个隔板。举例:当 n = 9, k = 4 的时候,其中一种情况是: 1 1 1 1 | 1 1 || 1 1 1 ,也就是 4 + 2 + 0 + 3 。所以问题可以变成:一共有 n + (k - 1) 个物体组成一个数列,把其中 n 个物体变成 1 ,其余 k - 1 个物体变成隔板,一共有多少种方法?这里如果 n 个 1 的位置确定了,余下的隔板位置也就确定了,反之也是如此。所以,有
问题 1 :如果要把 n 分成 k 个部分,但是每个部分不能大于 m ,请问一共有多少种 composition ? 举例,当 n = 4, k = 2, m = 2 的时候,整数 4 的 composition 只有一个: 2 + 2 。
问题 2 :要把 n 分成 k 个部分,但是每个部分不能大于 m ,请问一共有多少种 weak composition ?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.