BZOJ 1571: [Usaco2009 Open]滑雪课Ski
Description
Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪。很不幸,Bessie滑雪技术并不精湛。 Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100)门滑雪课。第i节课始于M_i(1<=M_i<=10000),上的时间为L_i(1<=L_i<=10000)。上完第i节课后,Bessie的滑雪能力会变成A_i(1<=A_i<=100). 注意:这个能力是绝对的,不是能力的增长值。 Bessie买了一张地图,地图上显示了N(1 <= N <= 10,000)个可供滑雪的斜坡,从第i个斜坡的顶端滑至底部所需的时长D_i(1<=D_i<=10000),以及每个斜坡所需要的滑雪能力C_i(1<=C_i<=100),以保证滑雪的安全性。Bessie的能力必须大于等于这个等级,以使得她能够安全滑下。 Bessie可以用她的时间来滑雪,上课,或者美美地喝上一杯可可汁,但是她必须在T(1<=T<=10000)时刻离开滑雪场。这意味着她必须在T时刻之前完成最后一次滑雪。 求Bessie在实现内最多可以完成多少次滑雪。这一天开始的时候,她的滑雪能力为1.
Input
第1行:3个用空格隔开的整数:T, S, N。
第2~S+1行:第i+1行用3个空格隔开的整数来描述编号为i的滑雪课:M_i,L_i,A_i。
第S+2~S+N+1行:
第S+i+1行用2个空格隔开的整数来描述第i个滑雪坡:C_i,D_i。
Output
一个整数,表示Bessie在时间限制内最多可以完成多少次滑雪。
题解:
动态规划,定义f[i][j]代表在i时间,能力值为j的最多滑雪次数。
对应最后三种选择:
①美美地喝上一杯可可汁 f[i][j]=f[i-1][j],
②上课 f[i][j]=f[上课前一个时刻][任意],
③滑雪 f[i][j]=f[i-po[j]][j]+1 (po[j]为能力值<=j的滑雪坡滑一次的最短用时)。
对于②可以在预处理出ke[i][j]在i时刻结束,能力值达到j的课程的最晚开始时间。dp过程中处理出g[i]=max{f[i][j]}。
g[t]即为答案。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
//by zrt
//problem:
using namespace std;
int f[10005][105];
int t,s,n;
int ke[10005][105];
int po[105];
int g[10005];
int main(){
#ifdef LOCAL
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
#endif
memset(f,128,sizeof f);
scanf("%d%d%d",&t,&s,&n);
for(int i=1,m,l,a;i<=s;i++){
scanf("%d%d%d",&m,&l,&a);
ke[m+l-1][a]=max(ke[m+l-1][a],m);
}
memset(po,0x3f,sizeof po);
for(int i=1,c,d;i<=n;i++){
scanf("%d%d",&c,&d);
for(int j=c;j<=100;j++){
po[j]=min(po[j],d);
}
}
f[0][1]=0;
g[0]=0;
for(int i=1;i<=t;i++){
for(int j=1;j<=100;j++){
f[i][j]=f[i-1][j];
if(ke[i-1][j])f[i][j]=max(f[i][j],g[ke[i-1][j]]);
if(i-po[j]>=0)f[i][j]=max(f[i][j],f[i-po[j]][j]+1);
g[i]=max(g[i],f[i][j]);
}
}
printf("%d\n",g[t]);
return 0;
}
BZOJ 1571: [Usaco2009 Open]滑雪课Ski的更多相关文章
- 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] ...
 - 【BZOJ】1571: [Usaco2009 Open]滑雪课Ski
		
[算法]动态规划 [题解]yy出了O(1w log 1w)的算法. 将雪坡排序预处理出g[i]表示能力值为i的最短时长雪坡. 这样就可以定义work(t,c)表示时长t能力c的最多滑雪数量,work( ...
 - bzoj 1571: [Usaco2009 Open]滑雪课
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 dp[i][j]表示前i个时间,能力为j所能达到得最大滑雪次数 预处理出,需要能力$<= ...
 - 1571. [Usaco2009 Open]滑雪课Ski
		
传送门 可以想到 $dp$,设 $f[i][j]$ 表示当前等级为 $i$,时间为 $j$ 的最大滑雪次数 显然上课不会上让自己等级降低的课,所以第一维 $i$ 满足无后效性 然后直接枚举 $i,j$ ...
 - [bzoj1571][Usaco2009 Open]滑雪课Ski
		
题目描述 Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S<=100 ...
 - 【贪心优化dp决策】bzoj1571: [Usaco2009 Open]滑雪课Ski
		
还有贪心优化dp决策的操作…… Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里 ...
 - bzoj千题计划156:bzoj1571: [Usaco2009 Open]滑雪课Ski
		
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 DP不一定全部全状态转移 贪心的舍去一些不合法的反而更容易转移 在一定能力范围内,肯定滑雪所需 ...
 - [USACO2009 OPEN] 滑雪课 Ski Lessons
		
洛谷P2948 看到题目就觉得这是动规但一直没想到如何状态转移……看了别人的题解之后才有一些想法 f[i][j]:前i单位时间能力值为j可以滑的最多次数 lessons[i][j]:结束时间为i,获得 ...
 
随机推荐
- Android开发之IPC进程间通信-AIDL介绍及实例解析
			
一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...
 - modelsim脚本文件的编写
			
第一章 ModelSim介 绍 本指南是为 ModelSim5.5f版本编写的,该版本运行于UNIX和Microsoft Windows 95/98/Me/NT/2000的操作系统环境中.本指南覆盖了 ...
 - python的交代一
			
把自己one note上面的摘抄和自己的节选,全部粘贴到博客了,时间宝贵,要得太多,技术栈要慢慢发展,python先放放了,也不知道什么时候正式捡起来. 先把目前养活自己的android.java.c ...
 - 使用RPC 调用NameNode中的方法
			
用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...
 - ios Using CocoaPods to Modularize a Big iOS App->使用CocoaPods来进行模块化开发
			
Selecting the right architecture for your mobile app is a pretty big deal. It will shape your daily ...
 - Net中exe之间的消息传递
			
1.创建一个消息通讯类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using ...
 - 在Windows下用gSoap实现简单加法实例
			
实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来. 1.在gSoap的官网上下载文件夹,本人的版本是 ...
 - 原型模式(Prototype Pattern)
			
原型模型:用于创建重复对象,同时保证性能. 这种模式实现一个原型接口,用于创建对象的克隆,当直接创建对象的代价比较大,则可以采用这种模式.例如:一个对象需要高代价的数据库操作之后被创建,这时可以缓存该 ...
 - JNI学习总结
			
JNI学习总结 标签(空格分隔): java JNI:Java Native Interface,是一种通过java调用本地方法的技术(当然也可以反过来),随着JDK版本的提升,JNI的效率也一直在提 ...
 - EF支持复杂类型的实现
			
本节,将介绍如何手动构造复杂类型(ComplexType)以及复杂类型的简单操作.通常,复杂类型是指那些由几个简单的类型组合而成的类型.比如:一张Customer表,其中有FristName和Last ...