竞争编码算法

时间:2017-08-08 16:23:21

标签: arrays algorithm

这是持续竞争的问题 https://www.codechef.com/AUG17/problems/CHEFFA

给定一个数组A = (A1, A2, ..., AN),其中最初有 N个整数。现在,对于i ≥ 1, if Ai > 0, Ai+1 > 0Ai+2存在,他可以将AiAi+1减少一,并将Ai+2增加一。如果Ai+2不存在,只有Ai > 0Ai+1 > 0,那么他可以减少AiAi+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。我不指望完整的解决方案,但我需要一点方向。

0 个答案:

没有答案