我最近遇到了以下问题:
我们有一个M个连续整数的序列A,从A [1] = 1开始: 1,2,... M(例如:M = 8,A = 1,2,3,4,5,6,7,8)
我们有一个集合T,它由从L_T连续项构成的所有可能的子序列组成。 (例子L_T = 3,子序列是{1,2,3},{2,3,4},{3,4,5},......)。我们称之为T“tiles”的元素。
我们有一个集合S,它包含长度为L_S的A的所有可能子序列。 (例如L_S = 4,子序列如{1,2,3,4},{1,3,7,8},...... {4,5,7,8})。
如果在T中存在K个瓦片,那么S的元素s可以由T的K“瓦片”“覆盖”,使得它们的项集合的并集包含s作为子集的项。例如,子序列{1,2,3}可以覆盖2个长度为2的瓦片({1,2}和{3,4}),而子序列{1,3,5}则无法覆盖“长度为2的2”瓦片,但可以覆盖长度为3({1,2,3}和{4,5,6})的2“瓦片”。
设C是S的元素的子集,可以由T的K个瓦片覆盖。
求出给定M,L_T,L_S,K的C的基数。
任何想法都将被理解如何解决这个问题。
答案 0 :(得分:1)
假设M
可被T
整除,因此我们有一个整数个图块覆盖初始集的所有元素(否则该语句目前不清楚)。
首先,让我们算一下F (P)
:它几乎是长度为L_S
的子序列的数量,这些子序列可以被不超过P
个图块覆盖,但不完全是这样。
形式上,F (P) = choose (M/T, P) * choose (P*T, L_S)
。
我们首先精确选择P
覆盖瓷砖:方式的数量为choose (M/T, P)
。
修复切片后,我们可以使用P * T
个不同的元素,并且有choose (P*T, L_S)
个方法可以选择子序列。
嗯,这种方法有一个缺陷。 请注意,当我们选择一个图块但根本没有使用它的元素时,我们实际上不止一次地计算了一些子序列。 例如,如果我们修复了编号为2,6和7的三个图块,但只使用了2个和7个图标,那么当我们修复三个编号为2,7和其他的图块时,我们会一次又一次地计算相同的子序列。
上述问题可以通过包含 - 排除原则的变化来抵消。
实际上,对于仅使用Q
个P
个已选定图块的choose (M-Q, P-Q)
个图块的子序列,它将被计为Q
次,而不是仅{...} P
个G (P)
个是固定的,但其他的是任意的。
将L_S
定义为长度P
的子序列数,这些子序列可以由F (P)
个切片覆盖。
然后,sum for Q from 0 to P
是产品G (Q) * choose (M-Q, P-Q)
的{{1}}。
从P = 0
向上工作,我们可以通过计算G
的值来计算F
的所有值。
例如,我们从G (2)
,F (2)
和G (0)
获取G (1)
,以及将F (2)
与G (0)
连接起来的等式,{{1 }和G (1)
。
之后,答案只是值G (2)
的{{1}}。