【链接】 我是链接,点我呀:)

【题意】

在这里输入题意

【题解】

DP,设f[i]表示第一次到i这个房间的时候传送的次数。
f[1] = 0,f[2] = 2
考虑第i个位置的情况。
它肯定是从i-1这个位置走过来的。
但是第一次走到i-1这个位置的时候。
需要再走回p[i-1],然后回到i-1才能再走到i
其实这个时候走到p[i-1]的时候,我们就和第一次走到p[i-1]的时候是一样的。
因此再从p[i-1]走到i-1的话。
它的移动次数就等于f[i-1]-f[p[i-1]]
那么
f[i] = f[i-1]+1+f[i-1] - f[p[i-1]] + 1

【代码】

#include <bits/stdc++.h>
using namespace std; const int N = 1e3;
const int MOD = 1e9+7; int n,p[N+10],f[N+10]; int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
ios::sync_with_stdio(0),cin.tie(0);
cin >> n;
for (int i = 1;i <= n;i++) cin >> p[i]; f[1] = 0;f[2] = 2;
for (int i = 3;i <= n+1;i++){
f[i] = ((f[i-1] + 1 + f[i-1]-f[p[i-1]] + 1)%MOD+MOD)%MOD;
}
cout<<f[n+1]<<endl;
return 0;
}

最新文章

  1. 【转】hibernate缓存:一级缓存和二级缓存
  2. java写入excel文件poi
  3. 【原创】Android开发之ADB及ADB SHELl命令的应用
  4. php正则表达式总结
  5. C++程序设计教程学习(0)-引子
  6. linux+nginx+mysql+php
  7. ubuntu tips
  8. Cookie的格式及组成
  9. Javascript中变量作用域
  10. angularjs学习笔记之一
  11. XE5 搭建DataSnap服务
  12. php实现TXT小说章节解析、小说章节在线阅读
  13. python 网络编程 IO多路复用之epoll
  14. sql语句中日期相减的操作
  15. TCP的代码
  16. CAD画图技巧经验
  17. .net委托链
  18. Windows Azure Virtual Machine (36) 扩展Azure ARM VM的磁盘大小
  19. 【MVC - 参数原理】详解SpringMVC中Controller的方法中参数的工作原理[附带源码分析]
  20. Android学习——ViewPager的使用(三)

热门文章

  1. Linux部署之批量自动安装系统之NFS篇
  2. SQL SERVER 提取字符串中汉字
  3. 为什么maven 创建web工程不自动生成Deployment Descriptor:工程名
  4. pace.js 原理(转)
  5. luogu P1586 四方定理(背包)
  6. 【CS-4476-project 6】Deep Learning
  7. GenIcam标准(一)
  8. 【Henu ACM Round#24 E】Connected Components
  9. 【CS round 34】Minimize Max Diff
  10. linux清除邮件队列