通过避免 Python 中的黑名单步骤来计算球可以下降到最低级别的方式数量的程序
假设我们有一个值h和一个名为blacklist的数字列表。我们当前处于高度h,并且正在玩游戏将小球向下移动到高度0。现在,在偶数轮(从0开始)中,我们可以将球向下移动1、2或4级台阶。在奇数轮中,我们可以将球向下移动1、3或4个楼梯。某些级别被列入黑名单。所以如果球到达那里,它会立即死亡。我们必须找到球在高度0处可以向下移动的方式数。如果答案太大,则将结果乘以10^9+7。
所以,如果输入像h=5blacklist=[2,1],那么输出将是2,因为在第0轮,先移动一步(5到4),然后在下一轮从4到0。另一种可能的方法是在第0轮,移动两步(5到3),然后在下一轮3到0。
示例
让我们看看以下实现以获得更好的理解-
def solve(h, blacklist): blacklist = set(blacklist) if 0 in blacklist or h in blacklist: return 0 dp = [[0, 0] for i in range(h + 1)] dp[0] = [1, 1] m = 10 ** 9 + 7 for i in range(1, h + 1): for x in [1, 2, 3, 4]: if i - x >= 0 and i - x not in blacklist: if x != 3: dp[i][0] += dp[i - x][1] if x != 2: dp[i][1] += dp[i - x][0] dp[i][0] %= m dp[i][1] %= m return dp[h][0] h = 5 blacklist = [2, 1] print(solve(h, blacklist))
输入
5, [2, 1]输出结果
2