zoukankan      html  css  js  c++  java
  • 活动安排问题

    贪心算法
    先对活动按照结束时间升序排序,此处省略排序步骤
    贪心策略是:只要后者的开始时间大于等于前者的结束时间(即s[i]>=f[j])就选择
    #include <iostream>
    using namespace std;
    const int N=1005;
    int GreedySelector(int n,int s[],int f[], bool a[])
    {
        a[1]=true;
        int j=1;
        int cnt=1;
        for(int i=2;i<=n;i++){
            if (s[i]>=f[j]){
                a[i]=true;
                j=i;
                cnt++;
            }
            else a[i]=false;
        }
        return cnt;
    }
    int main()
    {
        int s[]={0,1,3,0,5,3,5,6,8,8,2,12};//开始时间
        int f[]={0,4,5,6,7,8,9,10,11,12,13,14};//结束时间
        bool b[N];
        int n=(sizeof(s)/sizeof(s[0]));
        cout<<"活动安排数量: "<<GreedySelector(n,s,f,b)<<endl;
        cout<<"安排如下:"<<endl;
        for(int i=1;i<=n;i++){
            if(b[i]) cout<<"活动 "<<i<<" :"<<s[i]<<"-"<<f[i]<<endl;
        }
        return 0;
    }
    View Code

     另一种函数传递数组并在函数中获取数组长度

    #include <iostream>
    using namespace std;
    const int N=1005;
    template<class T>
    int greedySelector(T& s,T& f,bool a[])
    {
        int n=sizeof(s)/sizeof(s[0]);//获得长度
        a[1]=true;
        int j=1;
        int cnt=1;
        for(int i=2;i<=n;i++){
            if (s[i]>=f[j]){
                a[i]=true;
                j=i;
                cnt++;
            }
            else a[i]=false;
        }
        return cnt;
    }
    int main()
    {
        int s[]={0,1,3,0,5,3,5,6,8,8,2,12};//开始时间
        int f[]={0,4,5,6,7,8,9,10,11,12,13,14};//结束时间
        bool b[N];
        int n=sizeof(s)/sizeof(s[0]);
        cout<<"活动安排数量: "<<greedySelector(s,f,b)<<endl;
        cout<<"安排如下:"<<endl;
        for(int i=1;i<=n;i++){
            if(b[i]) cout<<"活动 "<<i<<" :"<<s[i]<<"-"<<f[i]<<endl;
        }
        return 0;
    }
    View Code

    运行结果如下:

  • 相关阅读:
    大数运算(涉及到格式问题)
    UltraEdit
    汉化eclipse3.6.2
    安装Microsoft SQL Server Management Studio Express是报错29506
    Java相对路径/绝对路径
    恢复Unbuntu的启动项
    UNC路径
    make: g++:命令未找到
    找到个学习html的网站
    HDU 3756 三分
  • 原文地址:https://www.cnblogs.com/shixinzei/p/10205159.html
Copyright © 2011-2022 走看看