背包问题《会议问题》

Posted 神韵袖藏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了背包问题《会议问题》相关的知识,希望对你有一定的参考价值。

问题描述:一个有限时间中尽可能多的开很多会议。每个会议有开始时间和结束时间。设计出一种算法,得出在已知的各个会议中选出会议,使在这段时间中开的会议最多。

 

数据结构:结构体:

 

struct Meet
{
 int number;
 int begin;
 int end;
};

 

 

代码:

#include<iostream>
#include<algorithm>
using namespace std;

struct Meet
{
 int number;
 int begin;
 int end;
};

bool cmp(Meet a, Meet b);
//会议时间的输入
//会议时间排序
//会议的安排——重点
int main()
{
 int datanum;
 cin >> datanum;
 Meet *ps = new Meet[datanum];
 //会议时间的输入
 for (int i = 0; i < datanum; i++)
 {
  cin >> ps[i].begin >> ps[i].end;
  ps[i].number = i + 1;
 }
 //会议时间排序
 sort(ps, ps + datanum, cmp);
 for (int i = 0; i < datanum; i++)
 {
 //会议的安排——重点
 int num = 0;
 int Ibegin = 0;
 for (int i = 0; i < datanum; i++)
 {
  if (Ibegin + 1 <= ps[i].begin)
  {
   Ibegin = ps[i].end;
   num++;
 }

 cout << num << endl;

 delete[]ps;
 ps = NULL;
 return 0;
}
bool cmp(Meet a, Meet b)
{
 return a.end < b.end;
}

 

 

思维方式:贪心算法。

    寻找上一个会议与下一个会议之间的关系。及上一个会议的结束时间加1为下一个会议开始时间提供了最小时间的范围。

    将这个作为排序的标准来进行选择。

bool cmp(Meet a, Meet b)
{
 return a.end < b.end;
}

以上是关于背包问题《会议问题》的主要内容,如果未能解决你的问题,请参考以下文章

背包问题:0-1背包完全背包和多重背包

动态规划第五篇:01背包问题和完全背包问题

动态规划第五篇:01背包问题和完全背包问题

动态规划/背包问题背包问题第一阶段最终章:混合背包问题

动态规划/背包问题背包问题第一阶段最终章:混合背包问题

动态规划——背包问题python实现(01背包完全背包多重背包)