华为笔试1

将起点看成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条命。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值