题目描述:贝西去科罗拉多州去滑雪,不过还她不太会玩,只是个能力为 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. 简单的php性能注意点

    什么情况,可能遇到性能问题: 1.php语法使用的不恰当 2.使用php语言做了它不擅长做的事 3.用php语言连接的服务不给力 4.php自身的短板 5.我也不知道的问题 一般情况:php性能问题不 ...

  2. nodejs学习笔记<四>处理请求参数

    在web开发中处理请求参数是个非常常见的工作:nodejs提供了了querystring用来处理请求参数. querystring常用方法有:parse,stringify. (1)parse: 解析 ...

  3. Git 的origin和master分析 push/diff/head(转)

    1.origin/master : 一个叫 origin 的远程库的 master 分支 2.HEAD指向当前工作的branch,master不一定指向当前工作的branch 3.git  push ...

  4. Android提高篇之自定义dialog实现processDialog“正在加载”效果、使用Animation实现图片旋转

     知识点: 1.使用imageview.textview自定义dialog 2.使用Animation实现图片旋转动画效果 3.通过自定义theme去掉dialog的title 没有使用progres ...

  5. nginx的location root 指令

    原文:http://blog.csdn.net/bjash/article/details/8596538 location /img/ { alias /var/www/image/; } #若按照 ...

  6. PKCS #1 RSA Encryption Version 1.5

    PKCS #1  RSA Encryption Version 1.5 在进行RSA运算时需要将源数据D转化为Encryption block(EB).其中pkcs1padding V1.5的填充模式 ...

  7. 基于dubbo源码包通过Maven构建dubbo的详细步骤

    通过Maven构建dubbo 既然可以下载得到源码以及发布包,那么为什么要去构建dubbo呢?,我们先来看下dubbo的主要模块: 我们不仅要使用dubbo的核心框架,还要使用它的一些服务,比如管理控 ...

  8. hiho1099_constellation

    题目 一 个NxM(N, M <= 1000)的矩阵形成星空,矩阵中的点有两种字符,'#'代表星星,'.'代表空白,星空中的星星最多5000个:给出K(K<=20)个星图,每 个星图都是H ...

  9. virtualbox虚拟机上安装centOS的网络配置(安装centos时选择桥接网络)

    最近接触hadoop,需要在在Linux上面开发,所以我装了一个virtualbox虚拟机,在该虚拟机上面安装了一个centOS系统.linux系统是装好了,但是网络配置却另人头疼.我主要是想让宿主机 ...

  10. flush tables 好危险啊

    请看图 +----+------+-----------+------+------------+------+-------------------------+------------------ ...