题意:一些点排成一列,只有访问 i 偶数次以后才能访问 i+1,否则访问pi
解题思路:我们知道 ,当我们访问 i 的时候 i 前面所有的点必定为偶数,所以 访问 i 以后 访问到 i+1 的步数 dp[i] = dp[pi] + dp[pi+1]+.....dp[i-1] + 2;
解题代码:
1 // File Name: 407b.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月07日 星期六 11时36分30秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 #define M 1000000007 26 using namespace std; 27 LL dp[1005]; 28 int main(){ 29 int n; 30 scanf("%d",&n); 31 int tmp; 32 dp[1] = 2; 33 scanf("%d",&tmp); 34 LL sum = 1; 35 for(int i = 2;i <= n;i ++) 36 { 37 scanf("%d",&tmp); 38 dp[i] = 2; 39 for(int j = tmp ;j < i ;j ++) 40 { 41 dp[i] = (dp[i] +dp[j])%M; 42 } 43 sum = (sum +dp[i])%M; 44 } 45 printf("%I64d\n",(sum+1)%M); 46 return 0; 47 }
时间: 2024-10-14 20:24:01