bzoj 1664 (贪心)

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

Time Limit: 5 Sec  Memory Limit: 64 MB
Submit: 487  Solved: 344
[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

这里很容易贪心证明,不需要去O(n^2)去跑,很容易被卡。

就是这里的,想象成许多线段,如果相交,若当前线段右端比以前线段右端小,那么就赋值为现在那条线段,因为这样只会更优。

如果不想交,直接ans+1

划水

 1 #include<cstring>
 2 #include<cmath>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cstdio>
 6
 7 #define N 10007
 8 using namespace std;
 9 inline int read()
10 {
11     int x=0,f=1;char ch=getchar();
12     while(ch<‘0‘||ch>‘9‘){if (ch==‘-‘) f=-1;ch=getchar();}
13     while(ch<=‘9‘&&ch>=‘0‘)
14     {
15         x=(x<<3)+(x<<1)+ch-‘0‘;
16         ch=getchar();
17     }
18     return x*f;
19 }
20
21 int n,ans;
22 struct Node
23 {
24     int x,y;
25 }a[N];
26
27 bool cmp(Node x,Node y)
28 {
29     return x.x<y.x;
30 }
31 int main()
32 {
33     n=read();
34     for (int i=1;i<=n;a[i].x=read(),a[i].y=a[i].x+read()-1,i++);
35     sort(a+1,a+n+1,cmp);
36
37     for (int i=1,r=0;i<=n;i++)
38     {
39         if (a[i].x>r) ans++,r=a[i].y;
40         else if (a[i].y<r) r=a[i].y;
41     }
42     printf("%d",ans);
43 }
时间: 2024-10-28 14:17:33

bzoj 1664 (贪心)的相关文章

bzoj 1193 贪心

如果两点的曼哈顿距离在一定范围内时我们直接暴力搜索就可以得到答案,那么开始贪心的跳,判断两点横纵坐标的差值,差值大的方向条2,小的条1,不断做,直到曼哈顿距离较小时可以暴力求解. 备注:开始想的是确定一点周围跳到这个点的答案,然后再枚举周围的点,判断这个点和另一个点的曼哈顿距离,如果能被3整除就说明之前可以一直跳过来,不知道怎么不对. /************************************************************** Problem: 1193 Use

bzoj 1029 贪心

贪心的一种,维护一种尽可能优的状态(即不会比最优解差),将这种状态保持到最后. 1 /************************************************************** 2 Problem: 1029 3 User: idy002 4 Language: C++ 5 Result: Accepted 6 Time:400 ms 7 Memory:2368 kb 8 *********************************************

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

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

bzoj 2563 贪心 思想

2563: 阿狸和桃子的游戏 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 952  Solved: 682[Submit][Status][Discuss] Description 阿狸和桃子正在玩一个游戏,游戏是在一个带权图G=(V, E)上进行的,设节点权值为w(v),边权为c(e).游戏规则是这样的: 1. 阿狸和桃子轮流将图中的顶点染色,阿狸会将顶点染成红色,桃子会将顶点染成粉色.已经被染过色的点不能再染了,而且每一轮都必须给一个且仅一个

bzoj 3671 贪心

想到了从小到大依次填,但想到可能有重复元素,那是就会有分支,就不知怎样办了,最后才发现它是用随机数来调整排列,所以没有重复元素,唉..... 1 /************************************************************** 2 Problem: 3671 3 User: idy002 4 Language: C++ 5 Result: Accepted 6 Time:39644 ms 7 Memory:196984 kb 8 **********

bzoj 1702 贪心,前缀和

[Usaco2007 Mar]Gold Balanced Lineup 平衡的队列 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 807  Solved: 317[Submit][Status][Discuss] Description Farmer John's N cows (1 <= N <= 100,000) share many similarities. In fact, FJ has been able to narrow down

bzoj 1110 贪心 + 进制转换

思路:感觉脑洞好大啊... 因为每两个砝码其中一个都是另一个的倍数,我们可以知道砝码的种数很少,我们将所有容器的 容量都转换成用这些砝码的重量的进制表示,然后将所有砝码排序,然后贪心地取,取到不能再取. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define pii pair<int, int> using namespa

1620: [Usaco2008 Nov]Time Management 时间管理

1620: [Usaco2008 Nov]Time Management 时间管理 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 506  Solved: 306[Submit][Status] Description Ever the maturing businessman, Farmer John realizes that he must manage his time effectively. He has N jobs convenien

OI本月刷水记录

bzoj 1044 硬币购物 如果没有每个硬币的个数限制,这就是一个完全背包计数问题,现在我们注意到硬币个数很少,于是我们分别考虑一下每个硬币不符合条件的情况,容斥一下即可 bzoj 1225假如不考虑高精度的情况,那么转移还是好考虑的 f[i][j]表示前i个质数有j的约数最小数字 f[i][j]=minprime[i]k|jf[i?1][j/(k+1)]?prime[i]k 但万恶的高精度啊= =,于是改成搜索,然后用对数来表示,就好了 bzoj 2440 一道很神的数论题,二分+容斥+莫比