SDUTOJ 1298 - 活动选择

#include
using namespace std;

struct Active
{
    int start; // 活动开始时间
    int finish; // 活动结束时间
    int num; // 活动编号,从1开始
}actives[110];

int main()
{
    int n;
    cin>>n;
    for (int i = 0; i < n; i++){
        cin>>actives[i].start>>actives[i].finish;
        actives[i].num = i+1;
    }
    // 冒泡排序,将结束的早的活动放在前面
    for (int i = 0;i < n-1; i++){
        for (int j = 0; j < n-i-1; j++){
            if (actives[j].finish > actives[j+1].finish){
                swap(actives[j], actives[j+1]);
            }
        }
    }
    // 先输出第一个活动
    cout<<actives[0].num;
    // 标记前面所有活动的最终结束时间
    int end_time = actives[0].finish;
    for (int i = 1; i < n; i++){
        // 如果该活动的开始时间在最终结束时间之后
        // 则将该活动输出
        // 同时维护最终结束时间
        if (actives[i].start >= end_time){
            cout<<","<<actives[i].num;
            end_time = actives[i].finish;
        }
    }
    cout<<endl;
    return 0;
}

你可能感兴趣的:(SDUTOJ刷题,算法实验—贪心算法,c++,算法,贪心算法)