贪心

贪心就是指根据眼前最优解求全局最优解,没有固定公式,毕竟不是深搜那样的固定算法

对于每道题的贪心策略并不一样,需要现推

例题:

活动安排

设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si <fi。如果选择了活动i,则它在半开时间区间[si, fi)内占用资源。若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的。也就是说,当si≥fj或sj≥fi时,活动i与活动j相容。选择出由相互兼容的活动组成的最大集合。

思路:

看到题目就先排序,然而要根据后端点排序,然后再按前端点遍历,这样可以保证活动最多,正确性交由读者证明

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
struct tim{
    int s,e;
}a[1005];
bool cmp(tim x,tim y){
    return x.e<y.e;
}
int tot;
int now;
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d%d",&a[i].s,&a[i].e);
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++){
        if(a[i].s>=now){
            tot++;
            now=a[i].e;
        }
    }
    printf("%d",tot);
    return 0;
}

 

posted @ 2019-06-09 11:10  _Alex_Mercer  阅读(182)  评论(0编辑  收藏  举报