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位 ...
随机推荐
- UWP Ad
1.对于 UWP 应用:使用 Visual Studio 2015 安装 Microsoft Store Services SDK 2.对于通用 Windows 平台 (UWP) 项目:展开通用 Wi ...
- Windows2012R2 时间同步设置
Windows2012R2里没有了internet时间,或者Internet时间无法同步成功,都可以尝试使用如下方法. 1.打开命令提示符, 输入:gpedit.msc,打开组策略管理器 2.执行上述 ...
- 读书笔记「Python编程:从入门到实践」_3.列表简介
3.1 列表是什么 列表 由一系列按特定顺序排列的元素组成. 在Python中,用方括号([] )来表示列表,并用逗号来分隔其中的元素. 3.1.1 访问列表元素 指出列表的名称,再指出元素的索引 ...
- nodeJs的一些常识知识
在项目目录中打开命令窗口 1. npm init 生成一个 package.json.(npm inii -y 直接生成,不用确定). 2.npm i . 下载 package.json devDep ...
- MySQL_视图/触发器/事务/存储过程/函数
视图.触发器.事务.存储过程.函数 视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,可以将该结果集当作表来使用 #创建视 ...
- vue 绑定 HTML Class
绑定 HTML Class
- MySQL-----笔记3:存储引擎
1.存储引擎: https://zhidao.baidu.com/question/1049565846666168579.html MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技 ...
- Django_学生管理系统
一. Django简易学生管理系统 1.在pycharm中创建工程student_manage_system,添加app:student_manage 2.配置静态文件:在工程项目目录下新建目录sta ...
- SSH框架整合截图总结(三)
联系人信息查询1 点击 联系人信息查询 超链接时候,到查询页面 (1)在查询页面中,选择客户,根据客户进行查询 下拉表框显示所有客户 可以根据所属的客户进行联系人查询 2 在查询页面中,输入值,提 ...
- xcode对照两个分支中同一个文件
对于同一个项目的两个分支,由于两个分支可能各自都做了一些改动.所以通过Source Control中的History...功能是无法查看的.例如以下图: 这个时候.我们须要用到xcode的另外一个功能 ...