动态规划解题思路
由于pi<=i,所以要前往n+1个房间只能通过策略1:即访问n房间偶数次向前一步,因此前往n+1房间的问题就可以看成前往n房间,就可以用动规思路去求解
memo[i]表示前往房间号为i+1的房间需要的次数,memo[0]=0,memo[1]=2
递推公式如下:
memo[i]=memo[i-1]+2+f(p[i-1])
这里p[i-1]指的是房间号为i的房间里传送门去的房间,
+2是因为在进入房间之后,由于第一次,需要进入一次传送门,在进入下个房间时还需要一次移动
f(p[i-1])=memo[i-1]-memo[p[i-1]-1]
这个公式是因为在进入传送门后,由于房间访问次数为偶数(实际上访问过的房间访问次数均为偶数),需要按照之前的流程再走一遍
python代码如下
def visit(n,p): memo=[0]*(n+1) memo[1]=2 for i in range(2,n+1): memo[i]=memo[i-1]+2 if p[i-1]!=i: memo[i]+=memo[i-1]-memo[p[i-1]-1] memo[i]=memo[i]%1000000007 return memo[n] n=int(input()) p=list(map(int,input().split())) print(visit(n,p))