停不下来的团长奥尔加(一道递推题,思维很好啊....)

奥尔加在一条街道上奔跑,遇到暗杀者后必须返回,根据到达次数选择不同路径。求到达终点的最短时间模10^9+7。递推公式:dp[i] = dp[i-1] + 1 + dp[i-1] - dp[p[i-1]] + 1。难度逐渐提升的数据范围测试。
摘要由CSDN通过智能技术生成

停不下来的团长奥尔加
【题目描述】
奥尔加在一个长度为n+1的街道上跑着,初始,奥尔加在位置1上,他想要跑到 位置n+1去保护团员ride on。
空旷的大路上难免会有暗杀者,当奥尔加走到位置i时,会有暗杀者出现,这时奥 尔加只能回到pi(1≤pi≤i)位置上,但在下次到达i的时候,暗杀者就不会出现(如果再到 达i还会有暗杀者),换言之,当奥尔加此时是第奇数次到达i的时候,下一步会走到pi, 第偶数次到达i的时候,下一步走到i+1(n+1位置上没有暗杀者)。
奥尔加每次移动都需要花费1单位时间,停不下来的奥尔加只会一直跑,他想知道 自己什么时候才能到达n+1位置,因为答案可能会很大,你只需要告诉他答案对 1000000007(109+7)取模的结果就好了。
【输入描述】
第一行一个整数n,含义同题中所述。
第二行n个整数,第i个数表示pi,含义同题中所述。
【输出描述】
一行一个整数,表示答案对1000000007(109+7)取模后的结果。
【样例输入1】
2 1 2
【样例输出1】
4
【样例1解释】
初始奥尔加在位置1上,因为这是他第1次到达位置1,所以第一步他会走到pi=1 上,此时的位置1已经到达了两次,所以第二步奥尔加会走到1+1=2位置上。
同样的,奥尔加接下来会走p2=2,2+1=3,一共花费4步到达n+1位置。
【样例输入2】
4 1 1 2 3
【样例输出2】
20
【样例输入3】
5

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值