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是相容的。活动安排问题是要求在所给的活动集合范围内选出最大的相容的活动子集。

    贪心算法与动态规划的不同之处:

    上次写的背包问题解决方法是动态规划,其实有的人一看到0-1背包问题时第一反应就是使用贪心法来解决问题但是贪心法求的结果并不一定就是最优解,下面是贪心算法活动安排的例子

    问题分析:

    查找每个活动的结束时间,每一次选择时查找具有最早结束时间的相容的活动,先把n个活动按时间的结束时间非减序排列,这样,贪心选择是取当前活动集合中结束时间最早的活动就归结为取当前活动集合中排在最前面的活动

    #include<stdio.h>

    void sort(int s[],int f[],int n)//把各个活动的起始时间和结束时间按结束时间递增排序

    {

        int a,b;

        int i,j;

        for(i=0;i<n;i++)

        {

            for(j=i+1;j<n;j++)

            {

                if(f[i]>f[j])

                {a=f[i];f[i]=f[j];f[j]=a;

                b=s[i];s[i]=s[j];s[j]=b;}

            }

        }

    }

    int activemanage(int s[],int f[],bool a[],int n)

    {

        a[0]=1;

        int i;

        int j=1,count=1;

        for(i=1;i<n;i++)

        {

            if(s[i]>=f[j])

            {

                a[i]=1;

                j=i;

                count++;

            }

            else a[i]=0;

        }

        return count;

    }

     

    void main()

    {

        int i,n;

        int p;

        int s[100],f[100];

        bool a[100];

        printf("输入节目数: ");

        scanf("%d",&n);

        printf("请依次输入节目的开始和结束时间 ");

        for(i=0;i<n;i++)

        {

            scanf("%d %d",&s[i],&f[i]);

        }

        sort(s,f,n);

        p=activemanage(s,f,a,n);

        printf("安排的节目个数为:%d ",p);

        printf("节目的选取情况为(0表示不选 1表示选取): ");

        for(i=0;i<n;i++)

            printf("%d ",a[i]);

        printf(" ");

    }

     

    结果:

    输入节目书:

    3

    请依次输入节目的开始时间和结束时间

    4:00 4:20 4:30 4:40 4:50 5:10

    安排的节目个数为:3

    节目的选取情况为<0表示不选,1表示选取>

    1 1 1

     

     

  • 相关阅读:
    浏览器F12(开发者调试工具) 功能介绍【转载】
    浏览器F12开发者工具的妙用【转载】
    linux中sed在指定字符前后添加内容
    查看TCP连接的命令【转载】
    Sql 语句删除重复项,保留id最小项
    MySQL中批量前缀表的sql语句
    【转载】登录的测试用例点
    Linux流量监控工具 – iftop
    postman接口添加断言
    测试点思考
  • 原文地址:https://www.cnblogs.com/zhangaihua/p/3718100.html
Copyright © 2011-2022 走看看