Usaco 滑雪比赛 Bobsledding, 2009 Dec(dp)
Description
滑雪比赛bobsled
贝西参加了一场高山急速滑雪比赛,滑道总长度为 L。出发时,她的初速度为 1,贝西可以加速 或减速,每过 1 米,她能将速度增加 1、减少 1 或保持不变。在滑雪的过程中,贝西会遇到 N 个转 弯点,编号为 i 的转弯点距离起点有 Ti 米。安全起见,贝西到达 i 号转弯点时的速度不能超过 Si。 穿过终点的速度是没有限制的。请问在整个比赛过程中,贝西能够达到的最大速度是多少?
Input Format
第一行:两个整数 L 和 N,2 ≤ L ≤ 10^9; 1 ≤ N ≤ 10^5
第二行到第 N + 1 行:第 i + 1 行有两个整数 T 和 S ,1 ≤ T < L; 1 ≤ S ≤ 10^9
Output Format
单个整数:表示贝西在比赛过程中能够达到的最大速度
Sample Input
- 14 3
- 7 3
- 11 1
- 13 8
Sample Output
- 5
Hint
第一次达到最高速度的位置在距离起点 4 米 处
Source
- Bobsledding, 2009 Dec
一道需要预处理的dp
很明显 要以每个转弯点为状态 f[i]表示到第i个拐弯点的速度max;
由于可以任意加减或保持速度 那么易得到达i点速度小于f[i]的状态是一定能到达的;所以只要记录max
且我们不能只考虑是否能转移到当前状态;因为后面拐弯点的最小速度也可能
影响到当前状态;
一个例子
20 3
3 3
13 20
15 7
只考虑
- 当前与之前的状态的话 在第二个拐弯点速度能达到 13;
而正确答案是 11;因为若f[2]=13 那么就不能转移到f[3]的状态;
那么我们只要从后往前预处理 s[i]=min(s[i],s[i+1]+t[i+1]-t[i]);
那么就满足无后效性质了;
进行dp f[i]=min(f[i-1]+t[i]-t[i-1],s[i]);
然后打擂台 maxn=max(maxn,(f[i]+f[i-1]+t[i]-t[i-1])/2);
最后注意要先按t排序
- #include<cstdio>
- #include<iostream>
- #include<algorithm>
- using namespace std;
- int n,j,k,l,m,maxx,i;
- int f[100010];
- struct st
- {
- int s,t;
- }mu[100010];
- bool cmp( const st x, const st y)
- {
- if(x.t<y.t)return true;
- return false;
- }
- int main()
- {
- // freopen("xx.in","r",stdin);
- scanf("%d%d",&l,&n);
- for(i=1;i<=n;++i)
- scanf("%d%d",&mu[i].t,&mu[i].s);
- sort(mu+1,mu+1+n,cmp);
- f[0]=1;mu[n+1].s=1e9;mu[n+1].t=l;
- for(i=n;i>=1;--i)
- mu[i].s=min(mu[i].s,mu[i+1].s+mu[i+1].t-mu[i].t);
- for(i=1;i<=n+1;++i)
- {
- f[i]=min(mu[i].s,f[i-1]+mu[i].t-mu[i-1].t);
- maxx=max((mu[i].t-mu[i-1].t+f[i]+f[i-1])/2,maxx);
- }
- printf("%d",maxx);
- }
Usaco 滑雪比赛 Bobsledding, 2009 Dec(dp)的更多相关文章
- NC24866 [USACO 2009 Dec S]Music Notes
NC24866 [USACO 2009 Dec S]Music Notes 题目 题目描述 FJ is going to teach his cows how to play a song. The ...
- BZOJ1775[USACO 2009 Dec Gold 3.Video Game Troubles]——DP
题目描述 输入 * 第1行: 两个由空格隔开的整数: N和V * 第2到第N+1行: 第i+1行表示第i种游戏平台的价格和可以在这种游戏平台上面运行的游 戏.包含: P_i, G_i还有G_i对由空格 ...
- USACO 2009 Dec cow toll paths 过路费-floyd
这道题首先要明确一点,那就是当你从一个点走到自己时,也是需要花费这个点点权值的费用.这个点卡了我两次QWQ 然后我比较喜欢分两步搞: 首先,我们利用floyd的一个性质:就是在更新其他点之间的路线时要 ...
- BZOJ1774[USACO 2009 Dec Gold 2.Cow Toll Paths]——floyd
题目描述 跟所有人一样,农夫约翰以着宁教我负天下牛,休叫天下牛负我的伟大精神,日日夜夜苦思生 财之道.为了发财,他设置了一系列的规章制度,使得任何一只奶牛在农场中的道路行走,都 要向农夫约翰上交过路费 ...
- usaco 过路费 Cow Toll Paths, 2009 Dec
Description 翰家有 N 片草地,编号为 1 到 N ,彼此之间由 M 条双向道路连接,第 i 条道路连接了 Ai 和Bi,两片草地之间可能有多条道路,但没有道路会连接同一片草地,现有的道路 ...
- 【USACO 2.2】Subset Sums (DP)
N (1 <= N <= 39),问有多少种把1到N划分为两个集合的方法使得两个集合的和相等. 如果总和为奇数,那么就是0种划分方案.否则用dp做. dp[i][j]表示前 i 个数划分到 ...
- USACO Section 5.3 Big Barn(dp)
USACO前面好像有类似的题目..dp(i,j)=min(dp(i+1,j),dp(i+1,j+1),dp(i,j+1))+1 (坐标(i,j)处无tree;有tree自然dp(i,j)=0) .d ...
- USACO 2014 US Open Odometer /// 数位DP
题目大意: 给定区间 l r 求得区间中有多少个数 数的各个数位里出现最多次的数>=数的长度的一半 如2233 3334 枚举k在数中出现次数在一半以上 那么求出的所有方案数中应该减去 两个数各 ...
- 【USACO 3.2】Stringsobits (dp)
题意:求第k大的最多有l个1的n位二进制. 题解:dp[i][j]表示长度为i最多有j个1的二进制有多少种,则有: 状态转移:dp[i][j]=dp[i-1][j]+dp[i-1][j-1],即第i位 ...
随机推荐
- 数组、ArrayList、HashTable
相同点:都可以存储一组数据 不同点: 1)数组,必须要先分配空间,存储数据固定 2)ArrayList,存储数据可以自由扩展 3)HashTable与ArrayList一样,但是它是有意义的,键值对形 ...
- 时空上下文视觉跟踪(STC)
论文的关键点是对时空上下文(Spatio-Temporal Context)信息的利用.主要思想是通过贝叶斯框架对要跟踪的目标和它的局部上下文区域的时空关系进行建模,得到目标和其周围区域低级特征的统计 ...
- MongoDB_pymongo
python使用pymongo访问MongoDB的基本操作 安装pymongo: pip install pymongo from pymongo import MongoClient import ...
- Django 的 一些基本操作:视图函数,路由配置
当安装好Django 通过上篇的随笔创好项目我们就能来耍下了, 但你会在你的项目中发现有一个settings.py 的文件,对的你肯定想到了需要配置,好了话不多说 Settings.py 找到下面的位 ...
- vue的计算属性get和set
1.计算属性是用来存储数据,但具有以下几个特点: a.数据可以进行逻辑处理操作. b.对计算属性中的数据进行监视. 2.计算属性和普通属性的区别: a.计算属性是基于它的依赖进行更新的,只有在相关依赖 ...
- php 安装mysql扩展注意事项
1.yum search php-mysql (Linux环境) 这一点,根据具体的情况会遇到不同的搜索结果.我搜索到的结果是:php-mysql.i386 : A module for PHP ap ...
- 最快理解 - IO多路复用:select / poll / epoll 的区别.
目录 第一个解决方案(多线程) 第二个解决方案(select) 第三个解决方案(poll) 最终解决方案(epoll) 客栈遇到的问题 从开始学习编程后,我就想开一个 Hello World 餐厅,由 ...
- android AndroidManifest.xml 属性详细解析
一.关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activiti ...
- 【CodeForces 987C】Three displays
[链接] 我是链接,点我呀:) [题意] [题解] 动态规划 设dp[i][j]表示前i个数字,选了j个的最小花费. dp[i][j] = min(dp[k][j-1]+b[i]);//其中a[i]& ...
- RabbitMQ学习总结(7)——Spring整合RabbitMQ实例
1.RabbitMQ简介 RabbitMQ是流行的开源消息队列系统,用erlang语言开发.RabbitMQ是AMQP(高级消息队列协议)的标准实现. 官网:http://www.rabbitmq. ...