nyoj 153 BOBSLEDDING

题目:

BOBSLEDDING

时间限制:1000 ms  |  内存限制:65535 KB

难度:3

描述

Dr.Kong has entered a bobsled competition because he hopes his hefty weight will give his an advantage over the L meter course (2 <= L<= 1000). Dr.Kong will push off the starting line at 1 meter per second, but his speed can change while he rides along the course. Near the middle of every meter Bessie travels, he can change his speed either by using gravity to accelerate by one meter per second or by braking to stay at the same speed or decrease his speed by one meter per second.

Naturally, Dr.Kong must negotiate N (1 <= N <= 500) turns on the way down the hill. Turn i is located T_i  meters from the course start (1 <= T_i <= L-1), and  he must be enter the corner meter at  a peed of at most S_i  meters per second (1 <= S_i <= 1000).  Dr.Kong can cross the finish line at any speed he likes.

Help Dr.Kong learn the fastest speed he can attain without exceeding the speed limits on the turns.

Consider this course with the meter markers as integers and the  turn speed limits in brackets (e.g., ‘[3]‘):

0    1   2   3   4   5   6   7[3]   8   9  10  11[1]  12   13[8]    14

(Start) |------------------------------------------------------------------------|  (Finish)

Below is a chart of  Dr.Kong ‘s speeds at the beginning of each meter length of the course:

Max:                               [3]             [1]      [8]

Mtrs:   0   1   2   3   4   5   6   7   8   9  10  11  12   13   14

Spd:    1   2   3   4   5   5   4   3   4   3   2   1   2   3    4

His maximum speed was 5 near the beginning of meter 4.

输入

There are multi test cases,your program should be terminated by EOF

Line 1: Two space-separated integers: L and N

Lines 2..N+1: Line i+1 describes turn i with two space-separated integers: T_i and S_i

输出

Line 1: A single integer, representing the maximum speed which Dr.Kong can attain between the start and the finish line, inclusive.

样例输入

14 3

7 3

11 1

13 8

样例输出

5

来源

第四届河南省程序设计大赛

题目大意:

给一长度l和n测速点,每个测速点给位置 w和限制速度v求开始速度为1求最大速度且不超过每个限速点的速度。每次只能上升或下降1速度,或者保持平衡。

题目思路:

每个测速点都是限制,我们就求所有限速点都对该点限制的最大速度

1、开始时A【】全部初始化为无穷、

2、可以从每个限速点的最大速度来降低附近最大速度、(队列)

3、将限制最大速度的位置和速度入队列

4、.取出队列,并向两边扩展

题目优化:

1、队列取出的速度比要遍历的点速度还大就舍弃

2、可以采用优先队列将限制速度小的优先扩展

程序:

#include<iostream>

#include<cstdio>

#include<string>

#include<cstring>

#include<cmath>

#include<algorithm>

#include<queue>

using namespace std;

const int inf=0x3f3f3f3f;

int n,len;

int v[100000];

struct node

{

int w,f;

} a,b;

int solve();

queue<node>qu;

int main()

{

while(~scanf("%d %d",&len,&n))

{   memset(v,inf,sizeof(v));//初始化

while(!qu.empty())

qu.pop();

a.w=0,a.f=1;

qu.push(a);v[a.w]=1;

for(int i=1; i<=n; i++)

{

scanf("%d %d",&a.w,&a.f);

qu.push(a);//入队

v[a.w]=a.f;//更新值

}

printf("%d\n",solve());

}

return 0;

}

int solve()

{

while(!qu.empty())

{

a=qu.front();

qu.pop();

for(int i=-1; i<2; i+=2)//左右遍历

{

int f=a.f+1;

int w=a.w+i;

if(w<0||w>len)continue;

if(v[w]<=f)continue;//小于当前值才更新

v[w]=f;

b.w=w,b.f=f;

qu.push(b);

}

}

int ans=0;

for(int i=0; i<=len; i++)//寻找最大

if(v[i]>ans)

ans=v[i];

return ans;

}

时间: 2024-10-21 22:46:22

nyoj 153 BOBSLEDDING的相关文章

NYOJ 237 游戏高手的烦恼 &amp;&amp; POJ3041-Asteroids ( 二分图的最大匹配 )

链接: NYOJ 237  游戏高手的烦恼:click here~~ POJ  3041 Asteroids           :click here~~ 题意: 两题一样,翻译不同而已. 有一位传说级游戏高手,在闲暇时间里玩起了一个小游戏,游戏中,一个n*n的方块形区域里有许多敌人,玩家可以使用炸弹炸掉某一行或者某一列的所有敌人.他是种玩什么游戏都想玩得很优秀的人,所以,他决定,使用尽可能少的炸弹炸掉所有的敌人. 现在给你一个游戏的状态,请你帮助他判断最少需要多少个炸弹才能炸掉所有的敌人吧.

NYOJ 49 开心的小明

开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:"你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N 元钱就行".今天一早小明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的N 元.于是,他把每件物品规定了一个重要度,分为5 等:用整数1~5 表示,第5 等最重要.他还从因特网上查到了每件物品的价格(都是整数元).

NYOJ 106 背包问题

背包问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在有很多物品(它们是可以分割的),我们知道它们每个物品的单位重量的价值v和重量w(1<=v,w<=10):如果给你一个背包它能容纳的重量为m(10<=m<=20),你所要做的就是把物品装到背包里,使背包里的物品的价值总和最大. 输入 第一行输入一个正整数n(1<=n<=5),表示有n组测试数据: 随后有n测试数据,每组测试数据的第一行有两个正整数s,m(1<=s<=10

NYOJ 289 苹果

苹果 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 ctest有n个苹果,要将它放入容量为v的背包.给出第i个苹果的大小和价钱,求出能放入背包的苹果的总价钱最大值. 输入 有多组测试数据,每组测试数据第一行为2个正整数,分别代表苹果的个数n和背包的容量v,n.v同时为0时结束测试,此时不输出.接下来的n行,每行2个正整数,用空格隔开,分别代表苹果的大小c和价钱w.所有输入数字的范围大于等于0,小于等于1000. 输出 对每组测试数据输出一个整数,代表能放入背包的苹

nyoj 括号匹配

这个方程有两种形式,本文采用 if(s[i]=s[j]) dp[i][j]=d[i-1][j-1] dp[i][j]=min(dp[i][k]+dp[k+1][j],dp[i][j]) (i=<k<j) 其实与另一种方法比较:根据j的所有匹配情况取最小值 1.i到j无匹配,取为dp[i][j-1]+1 2.列举所有匹配情况 dp[i][k-1]+dp[k+1][j] 取上述所有情况最小值 两者都能获得正确的结果. 同时两者的初始化为 dp[i][j]==1 if(i==j) 规划方向为:  

DistroWatch评估XStream桌面153版本

关于Linux的学习,请参考书籍<Linux就该这么学> XStreamOS是一个由Sonicle创建的Solaris的一个版本.XStream桌面将Solaris的强大带给了桌面用户,同时新手用户很可能有兴趣体验一下.DistroWatch对于XStream桌面 153版本做了一个很全面的评估,并且发现它运行相当好. Jesse Smith 在 DistroWatch 报道:我认为 XStream 桌面做好了很多事情.诚然,当操作系统无法在我的硬件上启动,同时当运行在 VirtualBox

【Android】15.5 例15-3&mdash;Notification的各种属性演示

分类:C#.Android.VS2015: 创建日期:2016-02-29 一.简介 利用这个例子,可测试通知的各种属性以及这些不同属性选项呈现的效果. 另外,在这个例子中,还演示了如何读写SD中的图像文件. 二.示例3运行截图   三.主要设计步骤 本示例使用了下面的图像文件: ch1503_monkey_icon.png ch1503_notification.png ch1503_x_bldg.jpg 如果你不想使用这些文件,也可以用其他的图像文件代替. 1.添加ch1503arrays.

NYOJ 461-Fibonacci数列(四)(求斐波那契数列前4位)

题目地址:NYOJ 461 思路:斐波那契数列的通项公式为 然后下一步考虑如何产生前4位: 先看对数的性质,loga(b^c)=c*loga(b),loga(b*c)=loga(b)+loga(c);假设给出一个数10234432, 那么log10(10234432)=log10(1.0234432*10^7)[用科学记数法表示这个数]=log10(1.0234432)+7; log10(1.0234432)就是log10(10234432)的小数部分. log10(1.0234432)=0.0

NYOJ 527 AC_mm玩dota

AC_mm玩dota 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 大家都知道AC_mm比较喜欢玩游戏,特别是擅长war3这款经典游戏.某天AC_mm来到了VS平台上 ,准备去虐菜鸟,正巧一个不小心将我们ACM队长虐了 ^_^,我们的队长这下可不高兴了,说要出一道难题让AC_mm难堪一下.题目描述是这样的,给一个正整数n,n在二进制表示的情况下(不含前导0和符号位)有a个1和b个0,求斐波拉契数列的第a*b项对1314520取模后的值ans. 注意(斐波拉契数列: