题解 | #附加题#

附加题

http://www.nowcoder.com/practice/58b04ed2865f4ff4921290f1bd4ee486

动态规划题

递推公式比较重要

到达第i间房间 需要 偶数次 到达 第 i - 1次房

然后有传送门机制节省步数 所以需要 减去 dp[room[i - 1]] 的步数

最后得到 dp[i] = (dp[i - 1] + 1 + dp[i - 1] - dp[room[i - 1]] + 1) % maxStep

#include<iostream>
#include<vector>

using namespace std;
#define maxStep 1000000007 

int main() {
    int n;
    cin >> n;
    int *p = new int[n + 1];
    int *dp = new int[n + 1];
    
    for (int i = 1; i <= n; i++) {
        cin >> p[i];
    }
    
    dp[1] = 0;
    
    for (int i = 2; i <= n + 1; i++) {
        dp[i] = (dp[i - 1] + 1 + dp[i - 1] + 1 - dp[p[i - 1]]) % maxStep;
    }
    
    cout << (dp[n + 1] < 0 ? dp[n + 1] + maxStep : dp[n + 1]);
    return 0;
}
全部评论

相关推荐

字节 飞书绩效团队 (n+2) * 15 + 1k * 12 + 1w
点赞 评论 收藏
分享
10-17 10:05
已编辑
北华大学 全栈开发
牛客872465272号:掉头发了哥
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务