题解 | #活动安排#

活动安排

https://www.nowcoder.com/practice/16d971e9e42e4f3b9b1e2b8794796a43

说是贪心,我更愿称其为动态规划吧

#include <algorithm>
#include<iostream>
#include <utility>
#include <vector>

using namespace std;

bool compare(pair<int, int> a, pair<int, int> b){
    return a.second < b.second;
}

int GreedForCounter(vector<pair<int, int>>& Act){
    int result = 1, temp = Act[0].second;
    for(int j = 1; j < Act.size(); j++){
        // 只要后面的开始时间段比现在的结束时间大,就可计算,且因为排序了,所以优先选择了最小结束时间的段
        if(temp <= Act[j].first){
            result++;
            // 动态更新
            temp = Act[j].second;
        }
    }
    return result;
}

int main(){
    int OpTimes = 0;
    vector<pair<int, int>> Activity;
    cin >> OpTimes;
    for(int i = 0; i < OpTimes; i++){
        pair<int, int> temp = {0,0};
        cin >> temp.first >> temp.second;
        Activity.push_back(temp);
    }
    // 排序,以简化后面的活动数量计算
    sort(&Activity[0], &Activity[OpTimes], compare);
    int counter = GreedForCounter(Activity);
    cout << counter;
    return 0;
}
全部评论

相关推荐

shtdbb_:还不错,没有让你做了笔试再挂你
点赞 评论 收藏
分享
totoroyyw:千年老妖😂
投递华为等公司10个岗位
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务