BOBSLEDDING(一道有趣的贪心题 nyoj309)

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
来源
第四届河南省程序设计大赛
上传者

张云聪

题意: Mr。kong 要去滑雪 雪道长L 有n个拐点 速度不能超过某个值

一开始 你速度每米增加1 如果保持不变 下一秒每秒减去1

问你在长度为l 雪道上出现的速度 最高为多少

思路: 每次从拐点开始往回减小 入门前一个比当前的值+1要大 的时候

#include<bits/stdc++.h>
using namespace std;
struct point
{
    int x,y;
}p[505];
int l,n;
int sp[1005];
int a,b;

int cmp(point a,point b)
{
    return a.x<b.x;
}

int main()
{
    int l,n;
    while(~scanf("%d%d",&l,&n))
    {
        for(int i=0;i<n;i++)
            scanf("%d%d",&p[i].x,&p[i].y);

        sort(p,p+n,cmp);

        sp[0] = 1;
        for(int i=1;i<=l;i++)//初始
            sp[i]=sp[i-1] + 1;
        for(int i=0;i<n;i++)
        {
            a=p[i].x;
            b=p[i].y;
            if(sp[a]>b) sp[a] = b;// 拐点限制的值
            for(int j=a-1;sp[j]>sp[j+1]+1&&j>=0;j--)//开始递减
            {
                sp[j] = sp[j+1] + 1;
            }
        }
        int Mx=sp[0];
        for(int i=1;i<=l;i++)
        {
            if(sp[i]>sp[i-1]+1) sp[i] = sp[i-1]+1;
            Mx=max(Mx,sp[i]);
        }
        printf("%d\n",Mx);
    }
}
时间: 2024-10-09 07:16:32

BOBSLEDDING(一道有趣的贪心题 nyoj309)的相关文章

一道有趣的算法题。。。

题目意思: 用1, 2, 3 ,4 ,5, 6, 7, 8, 9 组成3个三位数 abc, def 和 ghi, 每个数字恰好使用一次,要求abc:def:ghi = 1:2:3.输出所有解. 分析: 模拟所有三位数,判断条件有二: 一.i(abc):j(def):k(ghi)=1:2:3 二.判断是否出现的1~9之间的所有数字 代码: /** *一道有趣的算法题 * */ #include<iostream> #include<cstdio> using namespace st

一道有趣的算法题:仿照Excel的列编号,给定一个数字,输出该列编号字符串

       By Long Luo 最近遇到一个算法题: 仿照Excel的列编号,给出一个数字,输出该列编号字符串. 例如:A对应1,Z对应26,AA对应27,AZ对应52 ...... 这个题目是一个典型的26进制思路去处理,但是这个题目里面有很多陷阱,在1, 26, 52等特殊情况进行考虑,经过晚上接近1个小时的编写,完成的代码如下: C++代码如下: #include <iostream> #include <string.h> using namespace std; /

一道有趣的js题以及个人的理解

var number = 2; var obj = { number : 4, fn1 : ( function() { this.number *= 2; number=number*2; var number=3; return function() { this.number *= 2; number*=3; alert(number); } } )(), db2:function(){this.number*=2} }; var fn1 = obj.fn1; alert(number);

一道树形DP+贪心题——FramCraft

题目大意: mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为. 树上的每条边mhy能且仅能走两次,每次耗费1单位时间.mhy送完所有电脑后会回自己家里然后开始装zhx牌杀毒软件. 卸货和装电脑是不需要时间的. 求所有妹子和mhy都装好zhx牌杀毒软件的最短时间. 分析一下题意: 树上的每条边mhy能且仅能走两次,这个有什么用? 很有用.自己想想!我不说了,模拟模拟

一道有趣的签到题

题目链接 题目描述 写一个程序,使其能输出自己的源代码. 代码中必须至少包含十个可见字符. 输入格式 输入文件为空. 输出格式 你的源代码. 从来没想过还可以这么玩φ(゜▽゜*)? 看着别人的题解写了一份代码: #include<bits/stdc++.h> #define kk(x) #x using namespace std; char s[]=kk(int main(){puts("#include<bits/stdc++.h>");puts("

一道模板元编程题源码解答(replace_type)

今天有一同学在群上聊到一个比较好玩的题目(本人看书不多,后面才知是<C++模板元编程>第二章里面的一道习题), 我也抱着试一试的态度去完成它, 这道题也体现了c++模板元编程的基础和精髓: 类型就是数据. 题目如下所述: Write a ternary metafunction replace_type<c,x,y> that takes an arbitrary compound type c as its first parameter, and replaces all oc

考考你!一道有趣的Javascript小题目

今天的内容很简单,给大家分享一个有趣的Javascript小题目. 题目很简单,就是填空: var a = ______; var b = a;alert(a==b); // alert "false" 请将程序补充完整,使得弹出的对话框显示为"false". 先答出的有奖哦 ^ ^ --------------------- 用简单而风趣的形式表达出自己的想法是我一直追求的目标(当然,目前还处于"XX主义初级阶段",还有很长的路要走). 如果你

一个简单有趣的证明题

最近上算法课,老师讲了一个有趣的证明题. 平面上一个有n个点的有限点集A.具有如下性质:任意两个点x,y所决定的直线上都能找到第三个点z.试证明A中的所有点在同一直线上. 对于证明题来说,最常用而系统的方法无非就两种:归纳法和反证法.其他的诸如综合法和分析法都与具体问题关系较大.如果解决证明题一时没有思路,这两种方法将是不错的选择.下面将尝试用这两种方法解决这个题目. 一,归纳法. 相信学过高中数学的人,没有人不知道这个大名鼎鼎,而又简单有效的证明方法.这里就不再赘述.下面给出一个证明过程. (

杭电 2187 (贪心题)悼念512汶川大地震遇难同胞——老人是真饿了

http://acm.hdu.edu.cn/showproblem.php?pid=2187 悼念512汶川大地震遇难同胞--老人是真饿了 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7286    Accepted Submission(s): 3043 Problem Description 时间:2008年5月16日(震后第4