nyoj 309 BOBSLEDDING 【贪心】

来源:互联网 发布:妙味课堂js课后练习 编辑:程序博客网 时间:2024/06/03 17:34


题意:

 给你一条路,路上某个点限速,即你路过该点不能超过它的限速。问你跑完全程最高速度是多少。


题解:


开始看题,肯定是能往上走就往上走,觉得暴力怼一发,直接从前往后推。后来被举出反例。

我就想枚举从起点到每个点的最高速度,找到最小的,然后作为起点,再找重复这个过程,直至结束。

这个思路是对的,就是处理数据有些麻烦,用bfs,蛮好的。

后来就直接开一个数组,直接往上走,限速的话,往前减速,(总体思路和上面一致),这样模拟的话代码好写一点。


#include<bits/stdc++.h>using namespace std;int n,l;int av[1111];int main(){    int x,xv,ans=0;    while(~scanf("%d %d",&l,&n)){        int st=0,sv=1;        memset(av,0,sizeof(av));        for(int i=1;i<=n;++i){            scanf("%d %d",&x,&xv);            av[x]=xv;        }        av[0]=1;        int pos=0;        for(int i=1;i<=l;++i){            if(av[i]==0){                av[i]=av[i-1]+1;            }else if(av[i]>=av[i-1]+1){                av[i]=av[i-1]+1;            }else if(av[i]==av[i-1]){                av[i]=av[i-1];            }else{                pos=i;                while(av[pos]+1!=av[pos-1]&&av[pos]!=av[pos-1]){                    av[pos-1]=av[pos]+1;                    pos--;                }            }        }        int ans=0;        for(int i=0;i<=l;++i) ans=max(ans,av[i]);        printf("%d\n",ans);    }    return 0;}



0 0
原创粉丝点击