FOJ-1076 BIT1005 穿越沙漠
来源:互联网 发布:php源码分析 编辑:程序博客网 时间:2024/05/24 00:03
这道题意思是一辆车最多装500L油,中途可以放油,给你一个数,问到这里最少需要多少油
这题一开始想不出来,后来看解题报告说
普车在沙漠中建临时油库,是逐步向前推进的,即建好一个油库后,再建下一个油库
就懂了_(:з」∠)_
设从A点到达B点的路中建立了n个油库,从A到B依次编号为Cn,Cn-1,,,,,,,C1
显然C1建立的时候是500升油
设在建立Ci(最后有V1升油的时候)的过程中,用了C(i+1)的 V2升油,车子一开始装了0升油,车子往返了k次(k显然为奇数,一来一往为2次)
Ci与Ci+1的距离为L,一次往返(一来一往)V2减少500,V1增加500-2×L
最后一次从Ci+1开向Ci的过程中,V2减少500,V1增加500-L
则有方程
(k-1)/2*500+500=V2 一式
(k-1)/2*(500-2*L)+500-L=V1 二式
由于车子每次出发都满载
且V2必大于V1
有V2=V1+X×500 X=1,2,,,,为满足最优取X=1
结合一式和二式解得k=(V1+250)/250 L=(500×250)/(V1+250) 此过程中V1为已知量
初始的V1已知,各个油库的量也可以依次算出来,接下来上代码
刚开始我以为就是每次向前走500/3米(因为做过类似的题),被其思想束缚了
(主要是没有用公式推导证明,导致遇见相同类型的题目不会)
每次两个储油点的距离都不一样~
我以为两个储油点距离都是500/3;
这样肯定做不对了,至于储油点的距离,根据上面的公式就可以推出~
下面代码
#include<iostream> #include<stdio.h> #include<algorithm> using namespace std; int main() { int total; cin>>total; while(total--) { double s; cin>>s;//总长 double v1;//v1与以上本篇博客解释同义 for(v1=0;;v1+=500)//理解为初始要在B点建立0的油库 { s-=(500*250)/(v1+250); if(s==0) { break; } if(s<0) { s+=(500*250)/(v1+250); break; } } if(s==0) { v1+=500; printf("%.3f\n",v1); continue; } //要在距A点s处建立一个V1的油库,显然有v1/500+1次满载,往返总次数为v1/500*2+1 printf("%.3f\n",v1+s*(v1/250+1)); } return 0; }
0 0
- FOJ-1076 BIT1005 穿越沙漠
- FOJ1076 BIT1005 穿越沙漠
- FOJ 1076 穿越沙漠
- FOJ--1076--穿越沙漠--解题报告
- 1076穿越沙漠问题
- FZU 1076 穿越沙漠
- fzu 1076 穿越沙漠
- FZU 1076 穿越沙漠
- 穿越沙漠
- 穿越沙漠
- 穿越沙漠
- FZU 1076 穿越沙漠(水~)
- fzu~1076 穿越沙漠(模拟)
- 【数学建模】FZU 1076 穿越沙漠
- 穿越沙漠问题
- Fzu_1076 穿越沙漠
- 穿越沙漠的问题
- bit 穿越沙漠
- [leetCode刷题笔记]2017.03.25
- .NET Core Windows环境安装与体验
- 设计模式——工厂方法模式
- 记忆化搜搜——Code Jam 2009 Round 1C #C Bribe the Prisoners
- RSA初步
- FOJ-1076 BIT1005 穿越沙漠
- C程序(进程)的内存布局
- VMware网络模式
- 二叉树的前序、中序、后序遍历及互相求法
- 矩阵键盘行列扫描
- C语言中的运算符总结
- LeetCode13. Roman to Integer
- 集合(5)—Map之HashMap()
- Handler机制浅谈