将起点看成0,中间有n块板子,终点为n+1,。有一个初始生命数,有些点的板子是空的,走到上面就会减1条生命。题目求从点0到点n+1的方案数。
n=16
m = 3
k = 8
nums = [1,3,5,10,13,14,15,16]
color = [False]*(n+2)
dp = [[0]*(m+1) for _ in range(n+2)]
for num in nums:
color[num]=True
dp[0][m]=1
for i in range(1,n+2):
loss = 1 if color[i] else 0
for j in range(1,m+1):
for k in range(1,4):
dp[i][j-loss] += dp[i-k][j] if i-k >=0 else 0
ans = 0
for i in range(m+1):
ans+=dp[n+1][i]
print(ans)
如果我们有3条命,nums表示为空的地方,n表示总体长度
状态有 n位置m条命;所以这个是二维的dp问题。
我们如果想求最后的次数,只要求到n位置所有到达的命的次数。
开始有m条命。