我有一个问题,我不知道如何开始解决它。你知道某人的公式,算法或问题类型吗?
我只有N
,N
个糖果,而且我需要计算服用N
糖果的方式数量,但除了第一个糖果外,所用的糖果必须是与以前拍摄的糖果相邻。例如,如果N = 3
有四种方法:
答案 0 :(得分:3)
n
糖果的方式数量是pascal's triangle n-1
行的总和。
答案 1 :(得分:2)
如果先拿糖果k,那么选择(n-1,k-1)方式选择其余的(其中,选择(n,k)是二项式系数nCk)。那是因为在第一次之后,你要么必须把最右边的非选择糖果带到k的左边,要么把最左边的未选择糖果带到k的右边,并且k左边有(k-1)个糖果。
总结k,给出考虑第一选择的所有可能方法:sum(k = 1 ... n)选择(n-1,k-1)。
由于选择(n-1,k-1)是从n-1项中选择k-1项的方式数,因此该总和等于从n-1中选择任意数量项的方式数项目。那是2 ^(n-1)。
答案 2 :(得分:1)
看看模式:
number of candies
1 2 3 4
1 12 123 1234
21 213 2134
231 2314
321 2341
3214
3241
3421
4321
1 2 4 8
total ways
这会让你想起什么吗?
答案 3 :(得分:1)
我们先说我们先吃i-th
糖果。然后我们左侧有i - 1
个糖果,右侧有N - i
个糖果。接下来每一颗糖果都是从左侧部分最右侧,或从右侧部分最左侧。左侧和右侧部分是独立的,因此获取所有糖果的可能方式的数量是序列LLLL....LLLRRR....RRR
的唯一排列数,其中i - 1
L's
和N - i
{{1} }。
此类排列的总数为:
R's
现在,如果我们总结所有可能的SequenceLength!/(count(L)!*count(R)!) = (N - 1)!/((i - 1)! * (N - i)!)
值,我们有:
答案 4 :(得分:1)
您无需通过二项式系数。
有长度为n-1的Rs和Ls的2 ^(n-1)个序列。通过记下你的下一个糖果是否在你之前吃过的糖果的右边或左边,这些都是对糖果序列的双向投射。任何Rs和Ls序列唯一地确定第一个糖果的位置:如果有Ls,那么第一个糖果必须位于a + 1的位置。
答案 5 :(得分:0)
另一种实现,在理论上可能更有用:
给出1个索引数组C
糖果大理石(1个尚未拍摄,0个拍摄,全部从1开始)和起点N
:
N
为负数,零或大于C
的大小,则不执行任何操作。C[N]
为0,则不做任何操作而结束。C[N]
为1,则将其设置为0,将可能路径数加1,然后针对此算法检查C[N-1]
和C[N+1]
。只需对C
中的每个有效索引重复此算法。另外,请确保每次递归都有C
的副本,而不是原始C
,但它们都共享路径总数。
单步执行示例的第一部分:
C[1]
为1,因此我们将其设置为0,添加1,然后选中C[0]
和C[2]
。C[2]
为1,因此我们将其设置为0并检查C[1]
和C[3]
。C[1]
为0。C[3] is 1, so we set it to 0 and check
C [2] and
C [4]`。C[2]
为0。重复N=2
和N=3
,对于更长的数组,只需循环。