算法设计-倒推法

倒推法,在正向思考策略无从下手时,可以逆向思考。

如下题

吉普车穿越1000KM沙漠,吉普车总装油量为500加仑,耗油率为1加仑/KM。必须用这个车在沙漠中建立临时油库。若吉普车用最少油穿越沙漠,应该在哪些地方建立油库,以及各处存储的油量。

我的思考:用递归解,用每个临时油库的油量和距离作为参数进行递归。
倒推递归
条件一:耗油最少即->每次出去到目的地恰好耗完所有的油即(500加仑)
条件二:每次最多带500加仑->就是每次最多走500KM(来回一共!!)

double dis //上一个油库距离下一个距离KM
double oil //存储的油 加仑

终点:dis =1000 oil = 0
oil -> 去 500KM 500加仑

下一个油库:dis = 500 oil = 500
这个油库要500加仑 必须要的
oil -> 一趟 + 去 1000加仑

下一个油库:oil = 1000 dis = 500/3
这个油库要1000加仑 必须要的
oil->2趟+去 1500加仑
……
….
再将每个油库的距离累加起来大于等于1000KM 就完成

下面上代码:

main()
{
    int dis,k,oil,k;
    dis = 500;
    k = 1;
    oil = 500;
    do
    {
        print("storepoint",k,"distance",1000-dis,"oilquantity",oil);
        k = k + 1;
        dis = dis + 500/(2*k+1);
        oil = 500*k;
    }while(dis<1000);

    oil = 500*(k-1)+(1000-dis)*(2*k-1);
    print("storepoint",k,"distance",0,"oilquantity",oil);
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值