这是持续竞争的问题 https://www.codechef.com/AUG17/problems/CHEFFA
给定一个数组A = (A1, A2, ..., AN)
,其中最初有 N个整数。现在,对于i ≥ 1, if Ai > 0, Ai+1 > 0
,Ai+2
存在,他可以将Ai
和Ai+1
减少一,并将Ai+2
增加一。如果Ai+2
不存在,只有Ai > 0
和Ai+1 > 0
,那么他可以减少Ai
和Ai+1
(这将是目前的最后两个)数组的元素)由一个并在末尾添加一个新元素,其值为1.
使用此操作计算可以从A生成的不同数组的数量。
假设数组是{2,3,1}:那么:所有可能的数组都是:
(2, 3, 1) → (2, 2, 0, 1)
(2, 2, 0, 1) → (1, 1, 1, 1)
(1, 1, 1, 1) → (1, 1, 0, 0, 1)
(1, 1, 0, 0, 1) → (0, 0, 1, 0, 1)
(1, 1, 1, 1) → (1, 0, 0, 2)
(1, 1, 1, 1) → (0, 0, 2, 1)
(2, 3, 1) → (1, 2, 2)
(1, 2, 2) → (0, 1, 3)
所以答案是9。
注意:
我知道这可以使用动态编程完成,但不知道如何,我尝试使用递归但获得TLE。我不指望完整的解决方案,但我需要一点方向。