标签:
Time Limit: 1000MS | Memory Limit: 262144KB | 64bit IO Format: %I64d & %I64u |
Description
One day, little Vasya found himself in a maze consisting of (n + 1) rooms, numbered from 1 to (n + 1). Initially, Vasya is at the first room and to get out of the maze, he needs to get to the (n + 1)-th one.
The maze is organized as follows. Each room of the maze has two one-way portals. Let‘s consider room number i(1 ≤ i ≤ n), someone can use the first portal to move from it to room number (i + 1), also someone can use the second portal to move from it to room number pi, where 1 ≤ pi ≤ i.
In order not to get lost, Vasya decided to act as follows.
Help Vasya determine the number of times he needs to use portals to get to room (n + 1) in the end.
Input
The first line contains integer n (1 ≤ n ≤ 103) — the number of rooms. The second line contains n integers pi (1 ≤ pi ≤ i). Each pidenotes the number of the room, that someone can reach, if he will use the second portal in the i-th room.
Output
Print a single number — the number of portal moves the boy needs to go out of the maze. As the number can be rather large, print it modulo1000000007(109 + 7).
Sample Input
2
1 2
4
4
1 1 2 3
20
5
1 1 1 1 1
62
Source
#include<iostream> using namespace std; const int maxn=1000+5; const int mod=1000000000+7; int p[maxn]; long long dp[maxn]; int main() { int i,n; cin>>n; for (i=1;i<=n;i++) cin>>p[i]; dp[1]=0; for (int i=1;i<=n;i++) dp[i+1]=(2*dp[i]-dp[p[i]]+2+mod)%mod; cout<<dp[n+1]<<endl; return 0; }
标签:
原文地址:http://www.cnblogs.com/Ritchie/p/5425149.html