本题链接 本题同样考察贪心算法,只不过是将取最多线段的问题换了一种表述模式(不相交区间问题)。
#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 / 线段覆盖(洛谷)思路差不多。