贪心算法是一种高效算法,可以快速得到问题的答案。如果一个问题可以用贪心法解决,那么它必须具备2条性质:1.具有最优子结构(即问题的最优解包含了子问题的最优解),2.具有贪心选择性质(即可以通过做出局部最优选择来构造全局最优)。下面总结一下基于贪心算法的区间问题。
const int N=100000+10; int n,s[N],t[N]; int main() { while(~scanf("%d",&n)) { me(s);me(t); for(int i=0;i<n;i++) scanf("%d%d",&s[i],&t[i]); vector<P>v; for(int i=0;i<n;i++) { v.push_back(P(t[i],s[i])); } sort(v.begin(),v.end()); int ans=0; int t=0; for(int i=0;i<n;i++) if(t<v[i].second) { ans++; t=v[i].first; } printf("%d\n",ans); } }
const int N=10000+10; struct Node { int L,R; bool operator<(const Node&rhs)const { return R<rhs.R||(R==rhs.R&&L>rhs.L); } }a[N]; int main() { int n; while(~scanf("%d",&n)) { me(a); for(int i=0;i<n;i++) scanf("%d%d",&a[i].L,&a[i].R); sort(a,a+n); int ans=0,p=0; for(int i=0;i<n;i++) { if(p<a[i].L) { p=a[i].R; ans++; } } printf("%d\n",ans); } }