贪心详解:
贪心算法是从问题初始状态出发,通过若干次的贪心选择从而得到最优值或者较优值的一个求解问题的策略,即贪心策略。
也即是说,用贪心解决问题的条件为:对于总问题的子问题来讲,满足每一个子问题取得最优情况总问题就取得最优情况,那么这个问题就可以用贪心算法解决。偏偏有些问题不满足贪心条件,那么我们做题时就需要好好判断了。
例一,活动安排:
代码如下:
#include<cstdio> #include<algorithm> using namespace std; int n,sum=1,t; struct time1 { int b,l;//时间的开始和结束 }a[1001]; inline bool cmp(time1 a,time1 b) { return a.l<b.l;//按结束从小到大
排序 } int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d%d",&a[i].b,&a[i].l); } sort(a+1,a+n+1,cmp); t=a[1].l; for(int i=2;i<=n;i++) { if(a[i].b>=t) { sum++;t=a[i].l; } } printf("%d",sum); return 0; }