博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1664:参加节日庆祝
阅读量:4702 次
发布时间:2019-06-09

本文共 2146 字,大约阅读时间需要 7 分钟。

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

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

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

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

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

#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\n",f[n]);
    return 0;
}

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

转载于:https://www.cnblogs.com/20003238wzc--/p/4824088.html

你可能感兴趣的文章
jquery 取id模糊查询
查看>>
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
修改node节点名称
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>