算法之过河问题

过河问题,一只袋鼠需要过河,现在两岸之间由N个树桩,每个树桩对应一个弹力值。比如第一个树桩上弹力值是2,那么就可以跳2个树桩,如果树桩上弹力值是0,那么就会被困在该树桩上。那么请输入相应的树桩个数和树桩的弹力值的情况下,输出需要几步才能过河。

初步分析该问题,涉及到了DP算法,对于这个算法我理解的还不是很透彻,可以参照如下链接:

http://www.cnblogs.com/sdjl/articles/1274312.html

文中用一个金矿问题将DP算法解释地比较清楚。

这里参照该思想,提供一种过河算法,即倒叙考虑,从第几个树桩开始跳就可以到对岸,然后依次往前推算,就可以推算出具体的步骤。具体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;
}




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值