字节跳动附加题动态规划

附加题

http://www.nowcoder.com/questionTerminal/58b04ed2865f4ff4921290f1bd4ee486

从题目中,我们发现1<=pi<=i,说明我们只会被传送到当前房间之前的房间(包括当前房间)。所以当我们到i房间时,我们已经走过所有从第一个房间到第i-1个房间且均为偶数次。我们定义dp[i]表示从第一个房间达到第i个房间且为偶数次的移动次数。状态转移方程为dp[i] = dp[i-1] + (dp[i-1] - dp[tp[i-1] - 1] + 1) + 1. dp[i-1]是第一次到i-1房间的步数,第二次到i-1房间的步数则为第一次步数减去第一次到传送到的房间步数。

n = int(input())
tp = list(map(int, input().split()))
dp = [float("inf") for _ in range(n + 1)]
dp[0] = 0

mod = 1000000007
# dp[i]表示从第一个房间达到第i个房间且为偶数次的移动次数
for i in range(1, n+1):
    dp[i] = (dp[i-1] + (dp[i-1] - dp[tp[i-1] - 1] + 1) + 1) % mod

print(dp[-1])
全部评论
我是废物
点赞 回复 分享
发布于 2022-08-30 16:48 上海

相关推荐

喜欢走神的孤勇者练习时长两年半:池是池,发是发,我曾池,我现黑
点赞 评论 收藏
分享
评论
27
2
分享
牛客网
牛客企业服务