不带权重的区间调度问题——动态规划、贪心算法

2019-10-14  本文已影响0人  小菜变大菜

问题阐述

已知若干个工作的开始时间和结束时间,求最大兼容的活动个数。
举例,如下四个活动
活 动i 1 2 3 4
开始时间 1 0 4 7
结束时间 3 2 2 5
可知活动1和2是不兼容的(活动1在活动2结束前便开始了)。
区间调度目标就是需要找出可以最大兼容的活动数

分析

容易想到的几种贪心策略

数据结构

代码实现

#include <cstdio>
#include <iostream>
#include <utility>
#include <algorithm>

using namespace std;

const int maxn = 105;
pair<int, int> job[maxn];   

int main(){
    int n; cin >> n;
    for(int i=0;i<n;i++)
        cin >> job[i].first >> job[i].second;
    sort(job, job+n);
    int t=0, cnt=0;  //t表示上一被安排的工作的结束时间
    for(int i=0;i<n;i++){
        if(t<job[i].first){
            cnt++;
            t = job[i].second;
        }
    }
    cout << cnt;
    return 0;
}

Tips

bool cmp(int a, int b){
    return a>b;  //降序,其它数值类型同理
}
上一篇 下一篇

猜你喜欢

热点阅读