codeforces 407B B. Long Path(dp)

题目链接:

codeforces 407B

题目大意:

要求从1走到n+1,有两种行进方式,第奇数次到达i点时需要走到p[i]位置,第偶数次到达i点时走到i+1位置,问到达n+1需要走多少次。

题目分析:然后我们第一次到达某个点时,是奇数次到达,所以一定会转移到之前的一个点,然后重新回到这个点才能走到下一个点,因为到达下一个点的方式只有这一种,所以这样dp保证了正确性,减少了重复的不必要的计算,类似于汉诺塔的思考模式。 AC代码:;int dp[MAX][MAX];const int mod = 1e9+7;int n,p[MAX];void dfs ( int x ,int y ){if ( x == y ){dp[x][y] = 1;return;}if ( dp[x][y] ) return;dfs ( x , y-1 );dfs ( p[y-1] , y-1 );dp[x][y] = dp[x][y-1] + dp[p[y-1]][y-1] + 1;dp[x][y] %= mod;}int main ( ){while ( ~scanf ( “%d” , &n )){for ( int i = 1 ; i <= n ; i++ )scanf ( “%d” , &p[i] );memset ( dp , 0 , sizeof ( dp ));dfs ( 1 , n+1 );printf ( “%d\n” , ((dp[1][n+1]-1)%mod+mod)%mod );}}

,坚守自己的原则,世界上的诱-惑很多,

codeforces 407B B. Long Path(dp)

相关文章:

你感兴趣的文章:

标签云: