Time Limit: 1 second

Memory Limit: 64 MB

【问题描述】

晚会上大家在玩一款“暴力摩托”的游戏,它拥有非常逼真的画面和音响效果! 当然了,车子总是要加油的咯,已知赛道长S公里(S≤10000整数,且为10的倍数),赛车的油耗Q=1,即1公里路耗1个单位的油。Q不变,赛车的油箱为无穷大,同时在沿途的任何地方都可以加油。 约定,每次加油的数量为整数,且为10的倍数,赛车的速度与赛车加油后的总油量有关。其关系如下表列出:

加油量 车速(公里/小时)

≤10 100

(10,20 ] 90

(20,30 ] 80

(30,40 ] 75

(40,+∞) 70

同时,汽车每加油一次需要耗费T分钟(T<=100不论加油多少,开始时的加油不计时间)。

当S,T给出之后,选择一个最优的加油方案。使汽车以最少时间跑完全程。

例如:当S=40,T=6(分钟),加油的方案有许多种,列出一些:

1)起点加油40,用时40/75≈0.53小时

2)起点加油20,中途加20,用时20/90+20/90+6/60(化为小时)≈ 0.54 小时

【输入格式】

一行,为两个整数S、T。

【输出格式】

输出一行,为最少用时(保留二位小数)

【数据规模】

Sample Input1

40 6

Sample Output1

0.53

【题目链接】:http://noi.qz5z.com/viewtask.asp?id=u238

【题解】



这里先思考;

有没有可能在中间加一次油之后,

油还没耗尽继续加油?

加油?

要加到什么地步?

①如果和当前速度一样;

那么就等耗尽了再加就好.

②如果和当前速度相比更慢了

当前这段你先用高速开完再说啊

③如果和当前速度相比更快了

不行,不可能,因为速度是按照一次加油后的总油量来决定的

你不可能从20->6之后,加油变成100km/h

题意不允许;

综上,也就是说每一个位置决策完之后等到油耗尽之后再决策;

记忆化搜索;

设f[x]表示到第x位置花的最少时间;

写个dfs就好;

但是优先往远处走,这样f的约束性更强;



【完整代码】

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #define rei(x) scanf("%d",&x)
  5. #define rep1(i,x,y) for (int i = x;i <= y;i++)
  6. #define rep2(i,x,y) for (int i = x;i >= y;i--)
  7. using namespace std;
  8. const int N = 1000+100;
  9. const double tx[5] = {0,100.0,90.0,80.0,75.0};
  10. int s,T;
  11. double f[N];
  12. void pre()
  13. {
  14. rep1(i,0,1000)
  15. f[i] = 21e8;
  16. }
  17. void in()
  18. {
  19. rei(s),rei(T);
  20. s/=10;
  21. }
  22. void dfs(int x,double t)
  23. {
  24. if (t>=f[x]) return;
  25. f[x] = t;
  26. if (x==s)
  27. return;
  28. double key = double(T);
  29. if (x==0) key = 0;
  30. rep2(j,4,1)
  31. {
  32. int r = x+j;
  33. if (r>s) r = s;
  34. dfs(r,t+double(r-x)*10/tx[j]+key/60.0);
  35. }
  36. dfs(s,t+key/60.0+double(s-x)*10/70.0);
  37. }
  38. void o()
  39. {
  40. printf("%.2f\n",f[s]);
  41. }
  42. int main()
  43. {
  44. pre();//checked
  45. in();//checked
  46. dfs(0,0);//checked
  47. o();//checked
  48. return 0;
  49. }

【u238】暴力摩托的更多相关文章

  1. day15-面向对象基础(二)

    今天整理类的组合以及类的三大特性 1.类的组合 2.类的继承 3.类的封装 4.类的多态 开始今日份整理 1.类的组合 类与类之间,并不是独立的,很多的时候在正常使用的时候都是类与类之间互相调用,所以 ...

  2. 2d游戏和 3d游戏的区别

    2D游戏和3D游戏的主要区别 一.总结 一句话总结:2D中的单位就是贴图,3D中的单位还有高 1. 3D 和 2D 游戏的区别主要体现在呈现画面和文件体积上: 2. 借助 3D 引擎可以提升 2D 游 ...

  3. 14_Python语法示例(面向对象)

    1.自己写一个Student类,此类的对象有属性name, age, score, 用来保存学生的姓名,年龄,成绩 # 1)写一个函数input_student读入n个学生的信息,用对象来存储这些信息 ...

  4. zone.js - 暴力之美

    在ng2的开发过程中,Angular团队为我们带来了一个新的库 – zone.js.zone.js的设计灵感来源于Dart语言,它描述JavaScript执行过程的上下文,可以在异步任务之间进行持久性 ...

  5. [bzoj3123][sdoi2013森林] (树上主席树+lca+并查集启发式合并+暴力重构森林)

    Description Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数 ...

  6. HDU 5944 Fxx and string(暴力/枚举)

    传送门 Fxx and string Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Othe ...

  7. 1250 Super Fast Fourier Transform(湘潭邀请赛 暴力 思维)

    湘潭邀请赛的一题,名字叫"超级FFT"最终暴力就行,还是思维不够灵活,要吸取教训. 由于每组数据总量只有1e5这个级别,和不超过1e6,故先预处理再暴力即可. #include&l ...

  8. fragment+viepager 的简单暴力的切换方式

    这里是自定义了一个方法来获取viewpager private static ViewPager viewPager; public static ViewPager getMyViewPager() ...

  9. ACM: Gym 101047M Removing coins in Kem Kadrãn - 暴力

     Gym 101047M Removing coins in Kem Kadrãn Time Limit:2000MS     Memory Limit:65536KB     64bit IO Fo ...

随机推荐

  1. php is_null、empty、isset的区别

    isset 判断变量是否已存在 empty 判断变量是否为空或为0 is_null 判断变量是否为NULL 变量 empty is_null isset $a=”” true false true $ ...

  2. KNN最近邻算法

    算法概述 K最近邻(K-Nearest Neighbor,KNN)算法,是著名的模式识别统计学方法,在机器学习分类算法中占有相当大的地位.它是一个理论上比较成熟的方法.既是最简单的机器学习算法之一,也 ...

  3. 数据挖掘python,java

    互联网公司zamplus诚聘以下职位: (1)数据挖掘工程师 (Location:上海.北京) 岗位职责: 1. 研究基于sponsored search, content match和behavio ...

  4. SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线

    SPSS和Mplus如何做非线性中介调节效应分析?如倒U形曲线 传统的线性回归模型用的比较多,但有时候变量之间的关系更符合非线性关系,此时使用非线性模型其拟合度会更好,模型预测效果更佳.在非线性关系中 ...

  5. python已安装包的查看方法和requirements.text的使用

     1.已经安装包的查看方法 命令pip freeze 2. 批量导出命令 pip freeze >requirements.txt 3. 批量导入命令 pip install -r requir ...

  6. hdu5444 乱搞 长春网赛

    可以暴力. #include<iostream> #include<cstring> #define maxn 1100 using namespace std; int a[ ...

  7. hdu1080 LCS变形

    dp[i][j]表示配对的最大值. dp[i-1][j]表示s1[i-1]与'-'配对. dp[i][j-1]表示s2[j-1]与'-'配对. dp[i-1][j-1]表示s1[i-1]与s2[j-1 ...

  8. execute和submit的区别与联系

    execute和submit都属于线程池的方法,execute只能提交Runnable类型的任务,而submit既能提交Runnable类型任务也能提交Callable类型任务. execute会直接 ...

  9. 洛谷 1463[SDOI2005] 反素数ant

    题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6 ...

  10. 括号序列问题 uva 1626 poj 1141【区间dp】

    首先考虑下面的问题:Code[VS] 3657 我们用以下规则定义一个合法的括号序列: (1)空序列是合法的 (2)假如S是一个合法的序列,则 (S) 和[S]都是合法的 (3)假如A 和 B 都是合 ...