P2970 [USACO09DEC]Selfish Grazing S 贪心
--还当初只学了一年不到的oi的债
给定某些区间要求选出某些区间,并且两两不相交,问能选多少;
题解区一水的按结束端点排序,解释是只有这样会干扰到别人。
我的yy是维护最新选的,和枚举到的值对比,
只有两种情况,要么相交要么不相交
不相交直接更新了
相交的话挑那个结束时间早的,这样不会使答案变差(极限1换1
并且给后面留出了空间
#include<bits/stdc++.h> using namespace std; const int maxn=1e5+10; struct lys{ int s,e; }cow[maxn]; bool cmp(lys a,lys b) { return a.s<b.s; } int main() {//freopen("lys.in","r",stdin); int n; cin>>n; for(int i=1;i<=n;i++) { cin>>cow[i].s>>cow[i].e; } sort(cow+1,cow+1+n,cmp); int ans=1,l,r; l=cow[1].s; r=cow[1].e; for(int i=2;i<=n;i++) { if(cow[i].s>=r) { ans++; l=cow[i].s; r=cow[i].e; } else { if(cow[i].e<r) { l=cow[i].s; r=cow[i].e; } } } printf("%d",ans); }