题目大意:穿越沙漠问题,车子最多只能装500L的油,每公里消耗1L的油,但是要穿越过沙漠,沙漠的长度可能大于500,求最小的耗油量
开始有点百思不得其解,这只能装500L,那不是得来回的绕啊绕的,到底怎么绕才是最少耗油呢……中间肯定要设置“加油站”,即为零时储油点,里面的油是车子自己通过返来返去,存储的……
……
现在已经可以看出规律了,第1站要存500L,第2站要存1000L,第3站要存1500L……所以第K站要存的就是500*K L了,
再来看往返次数t和站数K的关系第2站到第一站要往返3次,第3站到第2站要往返5次……很容易可以知道t=2*k-1
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int k;cin>>k;
while(k--){
int n;cin>>n;int k=1;
double L=500.0;
while(L<=n){///500.0/(2*k-1)表示从倒数第k到倒数第k-1个加油站的距离
k++;L+=500.0/(2*k-1);
}
L-=500.0/(2*k-1);///返回到A点前一个加油站
double res=n-L;
printf("%.3lf\n",500.0*(k-1)+res*(2*k-1)); }}
博客探讨了一辆吉普车穿越沙漠的最省油策略。车辆每次能携带500升油,每公里消耗1升。问题在于如何设置临时储油点以达到最小耗油。通过从终点倒推,发现每个储油点的油量需求是500的倍数,而往返次数与储油站数呈2k-1的关系。
317

被折叠的 条评论
为什么被折叠?



