1571. [Usaco2009 Open]滑雪课Ski
可以想到 $dp$,设 $f[i][j]$ 表示当前等级为 $i$,时间为 $j$ 的最大滑雪次数
显然上课不会上让自己等级降低的课,所以第一维 $i$ 满足无后效性
然后直接枚举 $i,j$,对于每个时间 $j$ ,考虑选择滑雪,因为划不同的坡得到的价值都是 $1$,所以直接取当前能划的时间最少的坡就行了
每个时间 $j$ 枚举完以后再考虑上课,只要考虑能增加等级的课就好了
注意不合法的状态是 $-INF$
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
typedef long long ll;
using namespace std;
typedef long long ll;
inline ll read()
{
ll x=,f=; char ch=getchar();
while(ch<''||ch>'') { if(ch=='-') f=-; ch=getchar(); }
while(ch>=''&&ch<='') { x=(x<<)+(x<<)+(ch^); ch=getchar(); }
return x*f;
}
const int N=1e4+,M=,INF=1e9+;
int T,n,m,f[M][N],ans;
struct Class{
int s,t,a;
}C[M];
struct Hillside{
int tim,lev;
inline bool operator < (const Hillside &tmp) const {
return lev<tmp.lev;
}
}H[N];
int main()
{
T=read(),n=read(),m=read(); int a,b,c,mxlev=;
for(int i=;i<=n;i++)
{
a=read(),b=read(),c=read();
C[i]=(Class){a,b,c}; mxlev=max(mxlev,c);
}
for(int i=;i<=m;i++)
H[i].lev=read(),H[i].tim=read();
sort(H+,H+m+);
memset(f,~0x3f,sizeof(f));//不合法默认-INF
f[][]=;
int L=,tim=INF;//tim是目前耗时最小的坡需要的时间
for(int i=;i<=mxlev;i++)
{
while(H[L+].lev<=i&&L<m) L++,tim=min(tim,H[L].tim);//坡已经按等级排序了
for(int j=;j<=T;j++)
{
if(j+tim<=T) f[i][j+tim]=max(f[i][j+tim],f[i][j]+);//滑雪,注意时间不能超过T
f[i][j+]=max(f[i][j+],f[i][j]);/*当然也可以什么都不做*/ ans=max(ans,f[i][j]);//更新ans
}
for(int j=;j<=n;j++)
if(C[i].a>i&&C[i].s+C[i].t<=T)//只考虑能增加等级的课,时间也要合法
f[C[i].a][C[i].s+C[i].t]=max(f[C[i].a][C[i].s+C[i].t],f[i][C[i].s]);//上课
}
printf("%d\n",ans);
return ;
}
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
Description Farmer John 想要带着 Bessie 一起在科罗拉多州一起滑雪.很不幸,Bessie滑雪技术并不精湛. Bessie了解到,在滑雪场里,每天会提供S(0<=S& ...
- 【BZOJ】1571: [Usaco2009 Open]滑雪课Ski
[算法]动态规划 [题解]yy出了O(1w log 1w)的算法. 将雪坡排序预处理出g[i]表示能力值为i的最短时长雪坡. 这样就可以定义work(t,c)表示时长t能力c的最多滑雪数量,work( ...
- bzoj 1571: [Usaco2009 Open]滑雪课Ski【dp】
参考:https://blog.csdn.net/cgh_andy/article/details/52506738 没有get到什么重点的dp--做的莫名其妙 注意滑雪一个坡可以滑很多次 设f[i] ...
- [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 1571: [Usaco2009 Open]滑雪课
http://www.lydsy.com/JudgeOnline/problem.php?id=1571 dp[i][j]表示前i个时间,能力为j所能达到得最大滑雪次数 预处理出,需要能力$<= ...
- 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,获得 ...
随机推荐
- 2018-8-10-xaml-添加-region
title author date CreateTime categories xaml 添加 region lindexi 2018-08-10 19:16:51 +0800 2018-03-15 ...
- 按字节读取txt文件缓存区大小设置多少比较好?
读取 txt 文件常规写法有逐行读取和按照字节缓存读取,那么按照字节缓存读取时,设置缓存区多大比较好呢?百度了一下,没发现有说这个问题的,自测了一把,以事实说话. 常规读取方法如下: // 字节流读取 ...
- [Luogu1436]棋盘分割(动态规划)
[Luogu1436]棋盘分割 题目背景 无 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的两部分中的任意一块继续如此分割,这样割了(n-1)次后, ...
- thread.join() 阻塞原理分析
参考: https://blog.csdn.net/u010983881/article/details/80257703
- pspice建立仿真模型元件库
摘自:http://royroyyy.blog.163.com/blog/static/1376506172011026102216175/ PSpice9.2电子元器件模型--由网页下载的model ...
- HDU 1373 XYZZY (spfa的特殊用法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1317 题目大意:有n个房间,编号1-n,房间之间有单向门连接.某人初始位于1号房间,且具有100点能量 ...
- 【leetcode】1094. Car Pooling
题目如下: You are driving a vehicle that has capacity empty seats initially available for passengers. T ...
- web前后端分离漏洞分析防御
web前后端分离漏洞分析防御 漏洞分析,主要漏洞有 一.跨站脚本攻击XSS 程序 + 数据 = 结果:攻击后,数据夹杂一部分程序(执行代码),导致结果改变: 1.XSS攻击注入点 (a):HTML节点 ...
- [CF846D]Monitor题解
看了一眼这题所用的操作,我觉得二维树状数组珂做,然后发现如果按时间顺序把节点一个个加进去再判会TLE,但发现二分时间明显比刚刚的做法快,于是二分时间+暴力插入该时间之内的点+树状数组维护即可AC 贴个 ...
- Webstorm软件快捷键
默认配置-Eclipse的常用快捷键对照表 查找/代替 Webstorm快捷键 Eclipse快捷键 说明 ctrl+shift+N ctrl+shift+R 通过文件名快速查找工程内的文件(必记) ...