又是一个新的套路,首先将每个时间段按结束时间排序后,遍历每个时间段,如果开始时间比前一个的结束时间晚就可以安排下去,这样子的通过数是最多的。
#include <iostream>
#include <algorithm>
using namespace std;
class Time
{
public:
Time(int a = 0, int b = 0)
{
begin = a;
end = b;
}
int begin;
int end;
}time[150];
bool cmp(Time a, Time b)
{
return a.end < b.end;
}
int main()
{
int n;
cin >> n;
while (n--)
{
int m;
cin >> m;
int total = m;
while (m)
{
int a, b;
cin >> a >> b;
time[total - m] = Time(a, b);
m--;
}
sort(time, time + total, cmp);
int ans = 0;
Time temp;
for (int i = 0; i <= total - 1; i++)
{
if (i == 0)
{
ans++;
temp = time[i];
continue;
}
if (time[i].begin > temp.end)
{
temp = time[i];
ans++;
}
}
cout << ans << endl;
}
}
本文介绍了一种解决活动选择问题的有效算法。通过对各个时间段按结束时间排序,并遍历每个时间段,确保新活动的开始时间晚于前一活动的结束时间来实现最大数量的活动安排。该算法适用于需要最大化资源利用率的情况。
1万+

被折叠的 条评论
为什么被折叠?



