过河问题,一只袋鼠需要过河,现在两岸之间由N个树桩,每个树桩对应一个弹力值。比如第一个树桩上弹力值是2,那么就可以跳2个树桩,如果树桩上弹力值是0,那么就会被困在该树桩上。那么请输入相应的树桩个数和树桩的弹力值的情况下,输出需要几步才能过河。
初步分析该问题,涉及到了DP算法,对于这个算法我理解的还不是很透彻,可以参照如下链接:
http://www.cnblogs.com/sdjl/articles/1274312.html
这里参照该思想,提供一种过河算法,即倒叙考虑,从第几个树桩开始跳就可以到对岸,然后依次往前推算,就可以推算出具体的步骤。具体code如下,可以参考:
#include<iostream>
using namespace std;
int main(){
int N,i,j=0;
int step=0;
cin>>N;
int *s=new int[N];
for(i=0;i<N;i++)
cin>>s[i];
for(i=0;i<N;i++){
cout <<"i= " << i<< " N-i =" <<N-i<< " s[i]= " <<s[i] <<endl;
if(s[i]>=N-i){
++step;
N=i;
i=-1;
}
}
if(N!=0)
cout<<-1;
else
cout<<step;
delete []s;
return 0;
}