zoukankan      html  css  js  c++  java
  • 贪心

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

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

    例题:

    活动安排

    设有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;
    }
  • 相关阅读:
    用C#实现宽带重新拨号
    CALLBACK FUNCTION 回调函数
    编译程序 VS 解释程序
    《围城》读书笔记
    鼠标点击器
    工作与找工作的日子
    Windows 7下VS2003的查找无响应问题
    收藏几句关于程序的名言
    static知识小结
    如何定义和实现一个类的成员函数为回调函数(转)
  • 原文地址:https://www.cnblogs.com/648-233/p/10992914.html
Copyright © 2011-2022 走看看