URAL 1113(数学)

16 篇文章 0 订阅
6 篇文章 0 订阅

题目链接:URAL 1113

解题思路:
这道题目其实是一类经典题目来着,是一道极限问题,即穿越沙漠问题,这种题目都是求在油箱容量受限的前提下,车辆如何走一段比较长的路的问题。一开始想没有想出来,后来看到这篇博客,就懂了。
这题为了使耗油量最小,很显然需要让车走最少的路程,因此必须每次启程,都能让油箱填满。所以可以使用倒推法进行求解,从最后一个油站开始,前一个油站总是要比后一个油站多储存等同于油箱容量的油,所以从后面数起,第 i 个油站与第 i-1 个油站(终点)总是距离M*( 2i - 1 )(M为油箱容量),需要在两个油站之间运输2*i-1次油;而给最后一个油站(第一个油站)补给的则需要油量m*( 2k - 1 )(m为起点到第一个油站的距离,k为油站数量)。

代码:

#include <cmath>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

double n,m,ans;

int main()
{
    while(~scanf("%lf %lf",&n,&m))
    {
        ans=0;
        int i=1;
        while(n-m/(2*i-1)>0)
        {
            ans+=m;
            n-=m/(2*i-1);
            i++;
        }
        ans+=n*(2*i-1);
        printf("%.0lf\n",ceil(ans));
    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值