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

Posted kafuuchino

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bzoj1664: [Usaco2006 Open]County Fair Events 参加节日庆祝相关的知识,希望对你有一定的参考价值。

 

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.

 


 

 

一个普通的dp

按时间轴排序,蓝后

$f[a[i].l+a[i].r-1]=max(f[a[i].l+a[i].r-1],f[a[i].l-1]+1)$

技术分享图片
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 int max(int a,int b){return a>b?a:b;}
 7 struct data{int l,r;}a[10005];
 8 bool cmp(const data &A,const data &B){return A.r<B.r;}
 9 int n,f[100005],m;
10 int main(){
11     scanf("%d",&n);
12     for(int i=1;i<=n;++i){
13         scanf("%d%d",&a[i].l,&a[i].r);
14         a[i].r+=a[i].l-1; m=max(m,a[i].r);
15     }sort(a+1,a+n+1,cmp);
16     for(int i=1,j=1;i<=m;++i){
17         f[i]=max(f[i],f[i-1]);
18         for(;a[j].r<=i&&j<=n;++j)
19             f[i]=max(f[i],f[a[j].l-1]+1);
20     }printf("%d",f[m]);
21     return 0;
22 }
View Code

 

以上是关于bzoj1664: [Usaco2006 Open]County Fair Events 参加节日庆祝的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1663: [Usaco2006 Open]赶集

BZOJ1665 Usaco2006 Open The Climbing Wall

BZOJ1663: [Usaco2006 Open]赶集

[BZOJ1663] [Usaco2006 Open]赶集(spfa最长路)

BZOJ1727: [Usaco2006 Open]The Milk Queue 挤奶队列

bzoj 1688: [Usaco2005 Open]Disease Manangement 疾病管理