贪心:高级钟点秘书-会议安排 c++

在最短的时间召开更多的会议。会议有开始时间和结束时间。

分析:按照结束时间sort,统计就行了,一个个放进背包里,统计数量。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int M=10000000;
struct Meet{
    int beg;
    int end;
    int num;
}meet[M];

class setMeet{
public:
    void init();
    void solve();
private:
    int n,ans;
};

void setMeet::init(){
    int s,e;
    cout<<"input total number:"<<endl;
    cin>>n;
    int i;
    cout<<"start time and end time:"<<endl;
    for(i=0;i<n;i++){
        cin>>s>>e;
        meet[i].beg=s;
        meet[i].end=e;
        meet[i].num=i;
    }
}

bool cmp(Meet x, Meet y){
    if(x.end == y.end)
        return x.beg>y.beg;
    return x.end<y.end;
}

void setMeet::solve(){
    sort(meet,meet+n,cmp);
    cout<<"sorted result:"<<endl;
    cout<<"number"<<"start time"<<"end time"<<endl;
    for(int i=0;i<n;i++){
        cout<<" "<<meet[i].num<<"\t\t"<<meet[i].beg<<"\t"<<meet[i].end<<endl;
    }
    cout<<" procedure"<<endl;
    cout<<" chose "<<meet[0].num<<" meetig"<<endl;
    ans=1;
    int last=meet[0].end;
    for(int i=1;i<n;i++){
        if(meet[i].beg>last){
            ans++;
            last=meet[i].end;
            cout<<" chose "<<meet[i].num<<" meetig"<<endl;
        }
    }
    cout<<"max number"<<ans<<endl;
}
int main(){
    setMeet sm;
    sm.init();
    sm.solve();
    return 0;
}

 

以下是使用C++实现会议安排问题的贪心算法示例代码: ```cpp #include <iostream> #include <vector> #include <algorithm> // 定义会议结构体 struct Meeting { int start; int end; }; // 比较函数,按照会议结束时间升序排序 bool compare(Meeting m1, Meeting m2) { return m1.end < m2.end; } // 贪心算法实现会议安排 std::vector<Meeting> scheduleMeetings(std::vector<Meeting>& meetings) { // 按照结束时间排序会议 std::sort(meetings.begin(), meetings.end(), compare); std::vector<Meeting> schedule; // 会议安排列表 schedule.push_back(meetings[0]); // 将第一个会议加入安排列表 for (int i = 1; i < meetings.size(); i++) { // 如果当前会议与已安排的最后一个会议不冲突,则将该会议加入安排列表 if (meetings[i].start >= schedule.back().end) { schedule.push_back(meetings[i]); } } return schedule; } int main() { std::vector<Meeting> meetings = {{1, 3}, {2, 4}, {3, 6}, {5, 7}, {8, 9}, {9, 10}}; std::vector<Meeting> schedule = scheduleMeetings(meetings); // 输出会议安排 for (int i = 0; i < schedule.size(); i++) { std::cout << "Meeting " << i+1 << ": " << schedule[i].start << "-" << schedule[i].end << std::endl; } return 0; } ``` 以上代码使用了结构体 `Meeting` 来表示一个会议,其中包含开始时间和结束时间。首先,通过定义一个比较函数 `compare` 来按照会议结束时间进行排序。然后,通过 `scheduleMeetings` 函数来实现会议安排贪心算法。最后,在 `main` 函数中调用 `scheduleMeetings` 函数并输出会议安排结果。 运行以上代码,会输出以下结果: ``` Meeting 1: 1-3 Meeting 2: 5-7 Meeting 3: 8-9 ``` 这表示在给定的会议列表中,按照贪心算法安排会议有三个:第一个会议从1到3,第二个会议从5到7,第三个会议从8到9。这些会议之间不存在时间冲突,并且结束时间最早。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值