贪心:活动安排问题(C++)

设有n个活动的集合 M = {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>

using namespace std;

void Func(int s[], int f[], int n) {
    int i = 0;//第一次活动开始时间,必定选择
    cout << "活动时间:" << s[i] << "~" << f[i] << endl;
    for (int j = 1; j < n; ++j) {//下一次活动开始时间,需要满足大于上一活动的结束时间
        if (s[j] >= f[i]) {
            cout << "活动时间:" << s[j] << "~" << f[j] << endl;
            i = j;
        }
    }
}

int main()
{
    int s[] = { 1,3,7,5,3,9,13 }, f[] = { 2,6,8,5,8,10,12 };
    Func(s, f, sizeof(s) / sizeof(s[0]));

    system("PAUSE");
    return 0;
}

s[]表示开始时间组,f[]表示结束时间组。

posted @ 2019-03-13 22:10  Hk_Mayfly  阅读(196)  评论(0编辑  收藏  举报