hdu3348 活动安排问题
时间: 2024-02-10 14:06:21 浏览: 117
hdu3348 活动安排问题 是一个经典的贪心算法问题,题目描述如下:
有 n 个活动,每个活动有开始时间 s 和结束时间 t,一个人在同一时间只能参加一个活动,问最多能参加多少个活动。
具体做法是按照结束时间从小到大排序,每次选择结束时间最早的活动,计数器加一,并将其结束时间设为当前时间,然后继续选择结束时间最早的活动,直到所有活动都被选择为止。
以下是 hdu3348 活动安排问题 的 C++ 代码实现:
```cpp
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100010;
struct Activity {
int s, t;
} a[maxn];
bool cmp(Activity a1, Activity a2) {
return a1.t < a2.t;
}
int main() {
int n;
while (cin >> n && n != 0) {
for (int i = 0; i < n; i++) {
cin >> a[i].s >> a[i].t;
}
sort(a, a + n, cmp);
int ans = 1, t = a[0].t;
for (int i = 1; i < n; i++) {
if (a[i].s >= t) {
ans++;
t = a[i].t;
}
}
cout << ans << endl;
}
return 0;
}
```
时间复杂度为 O(nlogn),其中 n 表示活动的数量。因为需要对活动按照结束时间进行排序,排序的时间复杂度为 O(nlogn),遍历所有活动的时间复杂度为 O(n),因此总的时间复杂度为 O(nlogn)。
阅读全文