【USACO2009 Open】滑雪课程ski
【USACO2009 Open】滑雪课程 Ski Lessons
- Time Limit: 1000 ms
- Memory Limit: 131072 KBytes
Description
约翰请贝西去科罗拉多去滑雪。不过贝西不太会玩,她只是个滑雪能力为1的渣渣。所以她决心参加一些滑雪课程。滑雪场提供S门课程,第i门课开始的时间是Mi,持续时间为Li ,上完课之后,贝西的滑雪能力将变成Ai。注意,能力不是增加Ai,而是变成Ai。
滑雪场有N条斜坡,第i条斜坡滑行一次需要Di 分钟,要求游客的滑雪能力达到Ci或以上时才能进入。
贝西可以随意安排她的时间:滑雪、上课,或美美地喝上一杯可可汁,但她在滑雪场只能呆到第T分钟。请问她如何安排时间,滑行次数才能尽量多?
Input
第一行:三个用空格分开的整数: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
Output
第一行:单个整数,表示在时限内贝西可以滑完的最大次数
Sample Input
10 1 2
3 2 5
4 1
1 3
Sample Output
6
Hint
先滑 1 次 2 号斜坡,然后去上课,再去 1号连滑 5 次,一共 6 次
我实在太弱...这题做了特别久
这其实是一道简单的dp,首先状态f[i][j] 表示到第i个时刻贝茜的能力值为j时能滑的最大次数
接下来,转移,这时候有三种转移方式:1、美美地给自己倒一杯卡布奇诺(不要问我哪来的卡布奇诺) 2、上课长知识 3、就剩滑冰了吧
这样我们就可以得到一个转移方程:
(1<=k<=j)最后一个转移应为f[i-tn[j]][j]+1
那么肯定有人要问l[i][j]是什么,tn[j]又是什么,其实l[i][j]就是到第i时刻上课已经结束能得到j能力值的课程开始的最晚时刻,tn[j]就是能力值为j时滑一次雪所需的最短时间(一个小贪心)
嗯~~~看起来这样就可以A掉这题了
其实
不然
如果我们枚举k,那么就会T掉,所以我们可以加一个数组g[i],在dp过程中顺便记录下每个时刻f[i][k]的最大值来优化这个方程,这样就可以完美将其解决掉了OwO
什么?没听懂?下面是代码
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int l[][],tn[],f[][],g[];
int main()
{
int t,s,n,st,ai,ei;
memset(f,,sizeof(f));
memset(g,,sizeof(g));
memset(tn,,sizeof(tn));
scanf("%d%d%d",&t,&s,&n);
for (int i=;i<=s;i++){
scanf("%d%d%d",&st,&ai,&ei);
l[st+ai][ei]=max(l[st+ai][ei],st);
}
int c,d;
for (int i=;i<=n;i++){
scanf("%d%d",&c,&d);
for (int j=c;j<=;j++)
tn[j]=min(tn[j],d);
}
f[][]=;
for (int i=;i<=t;i++)
for (int j=;j<=;j++){
f[i][j]=f[i-][j];
if (l[i][j]) f[i][j]=max(f[i][j],g[l[i][j]]);
if (i>=tn[j]) f[i][j]=max(f[i][j],f[i-tn[j]][j]+);
g[i]=max(g[i],f[i][j]);
}
printf("%d",g[t]);
return ;
}
【USACO2009 Open】滑雪课程ski的更多相关文章
- [USACO2009 OPEN] 滑雪课 Ski Lessons
洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...
- BZOJ 1571: [Usaco2009 Open]滑雪课Ski
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...
- bzoj千题计划156:bzoj1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 DP不一定全部全状态转移 贪心的舍去一些不合法的反而更容易转移 在一定能力范围内,肯定滑雪所需 ...
- 【BZOJ】1571: [Usaco2009 Open]滑雪课Ski
[算法]动态规划 [题解]yy出了O(1w log 1w)的算法. 将雪坡排序预处理出g[i]表示能力值为i的最短时长雪坡. 这样就可以定义work(t,c)表示时长t能力c的最多滑雪数量,work( ...
- 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski
还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...
- [bzoj1571][Usaco2009 Open]滑雪课Ski
题目描述 Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100 ...
- BZOJ——1571: [Usaco2009 Open]滑雪课Ski
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: ...
- bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...
- 1571. [Usaco2009 Open]滑雪课Ski
传送门 可以想到 $dp$,设 $f[i][j]$ 表示当前等级为 $i$,时间为 $j$ 的最大滑雪次数 显然上课不会上让自己等级降低的课,所以第一维 $i$ 满足无后效性 然后直接枚举 $i,j$ ...
随机推荐
- vue中路由
关于每次点击链接都要刷新页面的问题众所周知,开发单页应用就是因为那丝般顺滑的体验效果,如果每次点击都会刷新页面… 出现这个的原因是因为使用了window.location来跳转,只需要使用使用rout ...
- 第2章 取得大家的支持 录播感悟(意外的Sprint)
关于<取得大家的支持>这个故事我看了三遍,做了计划,做了时间轴,因为之前有过第1章<知易行难>的沟通和磨合后,相信会顺利很多吧!可是却是意外不断的发生: 1.本人车钥匙掉停车场 ...
- Java基础学习总结(83)——Java泛型总结
1. 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型 ...
- Java中list集合ArrayList 中contains包含的使用
Java中list集合ArrayList 中contains包含的使用 https://blog.csdn.net/qq_38556611/article/details/78774690
- HBase单节点的安装与配置
HBase的安装配置1.下载:http://mirror.bit.edu.cn/apache/hbase/stable/ hbase-1.2.6-bin是直接编译好的,直接安装. hbase- ...
- 深入解析Microsoft Sql server 2008
http://blog.csdn.net/downmoon/article/details/5256548
- 将list转为json字符串
//确保JSP和servlet的编码方式一致 resp.setContentType("text/html;charset=GBK"); List<String> jy ...
- 数组方法-->map()
map()方法: Array.map((数组元素, 数组元素的下标, 数组本身)=>{}[,thisArray]) 1.调用时在数组内部发生了一次从 0 到 length-1 的循环: 2.返回 ...
- Linux 学习之路:认识shell和bash
一.shell 计算机硬件的直接控制者是操作系统的内核(kernel),因为内核的重要性,所以作为用户的我们是无法直接操作内核的,所以我们需要shell调用应用程序或者双击打开安装的应用软件与内核之 ...
- 【Codeforces 670C】 Cinema
[题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...