题解 | #附加题#
附加题
http://www.nowcoder.com/questionTerminal/58b04ed2865f4ff4921290f1bd4ee486
//JS代码,仿照其他同学的c++代码转成js的,提交运行成功!
var room_num=readline();//房间的数量
var n=parseInt(room_num);//字符串转为整数var arr =readline().trim().split(' ');//将n个数切割存入数组,得到的是字符串
var input=[];
var temp=arr.forEach(rounding)
function rounding(item){
var num=parseInt(item);//对切割出来的字符串取整
input.push(num);//将整数存入数组作为输入
}
var p=new Array(n+1);
p[0]=0;
for(var i=1;i<n+1;i++){
p[i]=input[i-1]
}
//console.log(input)
//console.log(p)
var dp=new Array(n+2);
dp[1]=0;
for(var i=2;i<=n+1;i++){
dp[i]=dp[i-1]+1+(dp[i-1]-dp[p[i-1]])+1;//并没有多,第一个+1是从 i-1 门走到 p[i-1]门需要一步,接着从 p[i-1]门再走到 i-1门需要dp[i-1] - dp[p[i-1]] 步,此时到达i-1门第二次就是偶数次,再走一步到达i门,也就是再+1
if(dp[i]<0){
dp[i]+=1000000007;
}else if(dp[i]>=1000000007){
dp[i]%=1000000007;
}
}
console.log(dp[n+1])