题目描述:贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 1 的渣渣。贝西从 0 时刻进入滑雪场,一到 T 时刻就必须离开。滑雪场里有 N 条斜坡,第 i 条斜坡滑行一次需要 Di 分钟,要求游客的能力达到 Ci 或以上时才能进入。贝西决心参加一些滑雪课程以提高自己的素质,这样可以在有限的时间内多滑几次坡。

滑雪场提供了 S 门课程。第 i 门课的开始时刻为 Mi,持续 Li 分钟,如果想参加课程,就不能迟到或早退。上完课之后,贝西的滑雪能力将变成 Ai。注意,不是能力增加 Ai,而是变成 Ai,所以乱上课的话反而会使能力下降。贝西可以随意安排她的时间:滑雪、上课,或美美地喝上一杯可可汁。请问她如何安排上课和滑雪的时间,滑坡的次数才能达到最大?(懒得概括了。。)

同一个坡可以滑无数次。

输入格式

• 第一行:三个整数 T ,S 和 N ,1 ≤ T ≤ 10^4 , 1 ≤ S ≤ 100, 1 ≤ N ≤ 10^5

• 第二行到 S + 1 行:第 i + 1 行描述了第 i 门课程,分别为 Mi,Li 和 Ai,1 ≤ Mi , Li ≤ 10^4

, 1 ≤Ai ≤ 100

• 第 S + 2 行到 S + N + 1 行:第 S + i + 1 行描述了第 i 条斜坡,分别为 Ci 和 Di,1 ≤ Ci≤100, 1 ≤ Di ≤ 10^4

输出格式

• 单个整数,表示贝西可以滑完的最大次数

解题过程:

1.一开始被那么多的数据吓住了。。完全找不到头绪,然后就开始看数据范围来瞎凑。状态至少是二维的,当前的能力值肯定是要算在状态里的(因为最大只有100),然后N肯定不会拿来当状态(否则10^5 * 100=10^7,转移必须是O(1)才不会超时,而O(1)的转移肯定是做不到的。)。那么只能是用时间T来当状态。。F[i][j]表示时间为i且能力值为j的时候最多已经滑了多少次。。然后看了下样例解释,竟然同一个坡可以滑无数次。题目里竟然没说,还好没思路去看了下样例。。

以后做题还是要认真看完样例解释,充分理解题意。。

2.既然同一个坡可以滑很多次,那么机智的我们肯定会选择当前能滑的且时间花费最少的 去滑。所以用t[i]处理出需要能力值为i的山坡的最小花费。然后扫一遍求出can[i],即当前能力值为i的时候能滑的山坡的最小花费。can[i]=min(can[i-1],t[i]);

3.对于状态F[i][j],首先可以继承F[i-1][j]的值,然后可以由F[i-can[j]][j]+1转移过来(滑一次花费最小的山坡)。

那么如果学习了一门课呢?显然如果要学习一门课,课程的结束时间必须小于等于i,那么其实只考虑课程的结束时间等于i就行,因为F[i][j]会继承F[k][j]的值(k<i)。那么先预先处理处course[i][j] ,表示结束时间为i,学习后能力值为j的课程所要花费的最少时间,如果不存在则为无穷大。那么有:

F[i][j]=max(F[i-1][j]  ,  F[i-can[j]][j]+1  ,   max(F[i-course[i][j]][k])  ) ,k<j.

而对于 max(F[i-course[i][j]][k])  可以用s[i][j]保存下来,那么方程变为

F[i][j]=max(F[i-1][j]  ,  F[i-can[j]][j]+1  ,   s[i-course[i][j]][j-1]) ;   在求F[i][j]的时候s[i-course[i][j]][j-1] 已经求出来了。

算法复杂度O(100*N)

下面给出来自YYL大神的O(S^2)算法,屌爆了。

先把课程按开始时间排序。

F[i]表示上完第i节后最多能滑多少个山坡。

对于每个F[i],枚举它前面的课程(course[i].left  > course[j].right),那么在学完课程j到开始学课程i的这段时间里可以去滑雪,这段时间里的能力值当然就是course[i].cap;

初始  F[i]=course[i].left/can[1] (i是第一节课)

那么有 F[i]=max(F[j]+(course[i].left-course[j].right) / can[course[j].cap]);

最后答案就是 ans=max(F[i]+(T-course[i].right)/can[course[i].cap]);

ans=max(ans,T/can[1]);(考虑一节课也不上的情况)

0ms秒杀所有数据啊,Orz Orz Orz Orz Orz。

滑雪(dp好题)的更多相关文章

  1. DP百题练(一)

    目录 DP百题练(一) 线性 DP 简述 Arithmetic Progressions [ZJOI2006]物流运输 LG1095 守望者的逃离 LG1103 书本整理 CH5102 移动服务 LG ...

  2. ACM :漫漫上学路 -DP -水题

    CSU 1772 漫漫上学路 Time Limit: 1000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu Submit ...

  3. [poj2247] Humble Numbers (DP水题)

    DP 水题 Description A number whose only prime factors are 2,3,5 or 7 is called a humble number. The se ...

  4. poj 3254 状压dp入门题

    1.poj 3254  Corn Fields    状态压缩dp入门题 2.总结:二进制实在巧妙,以前从来没想过可以这样用. 题意:n行m列,1表示肥沃,0表示贫瘠,把牛放在肥沃处,要求所有牛不能相 ...

  5. POJ 1155 TELE 背包型树形DP 经典题

    由电视台,中转站,和用户的电视组成的体系刚好是一棵树 n个节点,编号分别为1~n,1是电视台中心,2~n-m是中转站,n-m+1~n是用户,1为root 现在节点1准备转播一场比赛,已知从一个节点传送 ...

  6. 【dp入门题】【跟着14练dp吧...囧】

    A HDU_2048 数塔 dp入门题——数塔问题:求路径的最大和: 状态方程: dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];dp[n][j] = ...

  7. 13年山东省赛 The number of steps(概率dp水题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud The number of steps Time Limit: 1 Sec  Me ...

  8. POJ 2342 树形DP入门题

    有一个大学的庆典晚会,想邀请一些在大学任职的人来參加,每一个人有自己的搞笑值,可是如今遇到一个问题就是假设两个人之间有直接的上下级关系,那么他们中仅仅能有一个来參加,求请来一部分人之后,搞笑值的最大是 ...

  9. Vijos1057 盖房子(DP经典题)

    之前没有怎么刷过dp的题,所以在此学习了~(感谢walala大神的思路,给了我很大的启发) 也算是自己学习的另一种dp题型吧 先贴上状态转移方程: if(a[i][j]) f[i][j]=min(f[ ...

  10. dp百题大过关(第一场)

    好吧,这名字真是让我想起了某段被某教科书支配的历史.....各种DP题层出不穷,不过终于做完了orz 虽然各种手糊加乱搞,但还是要总结一下. T1 Monkey Banana Problem    这 ...

随机推荐

  1. c/c++小知识

    1.printf计算参数时是从右到左 2.(int&)a 表示把a在内存中的值强行当作int数来处理 3.float四字节,1位符号位(正数为0),8位指数位(0采取01111111),23位 ...

  2. OpenGL的几何变换3之内观察全景图

    继续上一篇文章的例子:OpenGL的几何变换2之内观察立方体 上一篇是通过绘图方式得到的立方体,没有贴图,这次加上纹理贴图. 通过纹理贴图有两种方案: 1.图片分割化,即是把一张完整的全景图片(就是支 ...

  3. ManyToMany关联方式----

    http://blog.csdn.net/sinat_18882775/article/details/51171427 好的博客 系列文章总结

  4. 图 - 从零开始实现by C++

    参考链接:数据结构探险之图篇

  5. 利用Github和Hexo搭建独立的个人博客--基础篇

    利用Github和Hexo搭建独立的个人博客--基础篇 摘要:本文主要参考了使用hexo和Github上创建自己的博客.如何搭建一个独立博客--简明Github Pages与Hexo教程和使用GitH ...

  6. 按键精灵 句柄 获得句柄 控制windows窗口 后台

    新建一个文本文档,打开,Windows就会给这个文本文档的窗口临时分配唯一的一串数字来标识这个窗体,以区别于其他窗口,这串数字就叫句柄.   因为句柄是临时随机分配的,所以每次虽然是打开同一个文件,但 ...

  7. iOS设置app应用程序文件共享

    1.iOSapp应用程序文件共享 当我们用itnues连接到设备时,在应用程序栏目下面,文件共享下,点击 对应的程序,即可以在程序右边栏目里面看到应用程序共享的数据, 此时,我们可以通过右下角的 添加 ...

  8. 国内外做MySQL的公司

    MariaDB 基金会   Percona企业级服务   vividx      监控       webyog   监控和管理   springboksql   mysql 一体机      htt ...

  9. 打开Eclipse时出现"The Eclipse executable launcher was unable to locate its companion shared library"情况的解决办法

    在网上有坑,各种解决方法都有,但似乎我这台64位机器不太给面子,都不能解决: 结果自己找到了解决办法,总结了一下,大多数软件出问题,如果卸载了重新装还是出现问题,一般都是注册表残留的问题: 将ecli ...

  10. 谈谈JPA-01-概述

    JPA和Hibernate的关系 JPA 是 hibernate 的一个抽象(就像JDBC和JDBC驱动的关系): JPA 是规范:JPA 本质上就是一种  ORM 规范,不是ORM 框架 —— 因为 ...