• bzoj1664:参加节日庆祝


    1664: [Usaco2006 Open]County Fair Events 参加节日庆祝

    Time Limit: 5 Sec  Memory Limit: 64 MB
    Submit: 286  Solved: 207
    [Submit][Status][Discuss]

    Description

    Farmer John has returned to the County Fair so he can attend the special events (concerts, rodeos, cooking shows, etc.). He wants to attend as many of the N (1 <= N <= 10,000) special events as he possibly can. He's rented a bicycle so he can speed from one event to the next in absolutely no time at all (0 time units to go from one event to the next!). Given a list of the events that FJ might wish to attend, with their start times (1 <= T <= 100,000) and their durations (1 <= L <= 100,000), determine the maximum number of events that FJ can attend. FJ never leaves an event early.

     

    有N个节日每个节日有个开始时间,及持续时间. 牛想尽可能多的参加节日,问最多可以参加多少. 注意牛的转移速度是极快的,不花时间.

    Input

    * Line 1: A single integer, N.

    * Lines 2..N+1: Each line contains two space-separated integers, T and L, that describe an event that FJ might attend.

    Output

    * Line 1: A single integer that is the maximum number of events FJ can attend.

    Sample Input

    7
    1 6
    8 6
    14 5
    19 2
    1 8
    18 3
    10 6

    INPUT DETAILS:

    Graphic picture of the schedule:
    11111111112
    12345678901234567890---------这个是时间轴.
    --------------------
    111111 2222223333344
    55555555 777777 666

    这个图中1代表第一个节日从1开始,持续6个时间,直到6.

    Sample Output

    4

    OUTPUT DETAILS:

    FJ can do no better than to attend events 1, 2, 3, and 4.

    HINT

     

    Source

    Silver

    就是先排个序然后就是递推一下吧,好像白书里面有贪心的算法但是翻了很久就是翻不到。。

    ----------------------------------------------------------------------------

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<stack>
    using namespace std;
    const int nmax=10005;
    int f[nmax];
    struct edge{
     int l,r;
     bool operator<(const edge&rhs) const {
       return l<rhs.l||l==rhs.l&&r<rhs.r;}
    };
    edge a[nmax];
    int main(){
     int n;
     scanf("%d",&n);
        for(int i=1,o;i<=n;i++){
         scanf("%d%d",&a[i].l,&o);
         a[i].r=a[i].l+o-1;
        }
        sort(a+1,a+n+1);
        for(int i=1;i<=n;i++){
         f[i]=1;
         for(int j=1;j<i;j++){
          if(a[i].l>a[j].r)
           f[i]=max(f[i],f[j]+1);
         }
        }
        printf("%d ",f[n]);
        return 0;
    }

    -------------------------------------------------------------------------------

  • 相关阅读:
    mysql 往表中insert的时候如何让主键id按当前表的最大值自动增长?
    visual studio 2013 win7安装笔记
    mysql奇葩之旅
    java JVM常见的四大异常及处理方案
    DDR3_旧版(2):初始化
    DDR3_旧版(1):IP核调取
    【转】AXI_Lite 总线详解
    ZYNQ笔记(7):AXI从口自定义IP封装
    ZYNQ笔记(6):普通自定义IP封装实现PL精准定时中断
    ZYNQ笔记(5):软中断实现核间通信
  • 原文地址:https://www.cnblogs.com/20003238wzc--/p/4824088.html
Copyright © 2020-2023  润新知