您的位置:首页 > 大数据 > 人工智能

BZOJ 1664: [Usaco2006 Open]County Fair Events 参加节日庆祝( dp )

2015-06-07 12:23 696 查看


先按时间排序( 开始结束都可以 ) , 然后 dp( i ) = max( dp( i ) , dp( j ) + 1 ) ( j < i && 节日 j 结束时间在节日 i 开始时间之前 ) answer = max( dp( i ) ) ( 1 <= i <= n )

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

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream> #define rep( i , n ) for( int i = 0 ; i < n ; i++ )#define clr( x , c ) memset( x , c , sizeof( x ) ) using namespace std; const int maxn = 10000 + 5; struct data { int l , r; void Read() { scanf( "%d%d" , &l , &r ); r += l - 1; } bool operator < ( const data &rhs ) const { return r < rhs.r; } }; data A[ maxn ]; int dp[ maxn ]; int main() {// freopen( "test.in" , "r" , stdin ); int n; cin >> n; rep( i , n ) A[ i ].Read(); sort( A , A + n ); rep( i , n ) { dp[ i ] =1; rep( j , i ) if( A[ j ].r < A[ i ].l ) dp[ i ] = max( dp[ i ] , dp[ j ] + 1 ); } int ans = 0; rep( i , n ) ans = max( ans , dp[ i ] ); cout << ans << "\n"; return 0;}

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

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

Time Limit: 5 Sec Memory Limit: 64 MB
Submit: 262 Solved: 190
[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: