本题链接
本题同样考察贪心算法,只不过是将取最多线段的问题换了一种表述模式(不相交区间问题)。
#include<bits/stdc++.h>
using namespace std;
struct Time
{
int begin;//开始时间
int end;//结束时间
} a[1001];
int ans = 1,n;
bool cmp(Time a, Time b)
{
return a.end <b.end;
}
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> a[i].begin >> a[i].end;
}
sort(a, a + n,cmp);
int record = a[0].end;//记录第一结束时间
int j = 1;
while (j < n)
{
if (a[j].begin >= record)
{
ans++;
record = a[j].end;//更新结束时间,以便下一次循环比较
}
j++;
}
cout << ans << endl;
return 0;
}
核心代码:
int record = a[0].end;//记录第一结束时间
int j = 1;
while (j < n)
{
if (a[j].begin >= record)
{
ans++;
record = a[j].end;//更新结束时间,以便下一次循环比较
}
j++;
}
总体来说,和我贪心专栏里的贪心:P1803 凌乱的yyy / 线段覆盖(洛谷)思路差不多。
本文介绍了一个基于贪心算法解决不相交区间问题的C++代码实现,通过排序并迭代检查区间的结束时间来确定最大不相交区间数。此问题与线段覆盖问题类似,核心在于选择最早结束的区间。
749

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



