首页 > 其他 > 详细

背包问题《会议问题》修订

时间:2018-03-19 15:50:09      阅读:170      评论:0      收藏:0      [点我收藏+]

#include<iostream>
#include<algorithm>
using namespace std;
struct Meet
{
 int beg;
 int end;
 int num;
}meet[1000];

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

void setMeet::init()
{
 int s, e;
 cin >> n;
 for (int i = 0; i < n; i++)
 {
  cin >> s >> e;
  meet[i].beg = s;
  meet[i].end = e;
  meet[i].num = i + 1;
 }
}
bool cmp(Meet a, Meet b)
{
 if (a.end == b.end)
 {
  return a.beg > b.beg;
 }
 return a.end < b.end;
}

void setMeet::solve()
{
 sort(meet, meet + n, cmp);
 int Ibegin = 0;
 for (int i = 0; i < n; i++)
 {
  if (Ibegin + 1 <= meet[i].beg)
  {
   Ibegin = meet[i].end;
   cout << meet[i].num << " ";
  }
 }
}

 int main()
 {
  setMeet m;
  m.init();
  m.solve();
  return 0;

 }

 

修改的地方在排序上面

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

 

这样排序及按结束时间从小到大排序。当遇到结束时间相同时,以开始时间大的排在前面!

这样有利于减小不必要的循环!

背包问题《会议问题》修订

原文:https://www.cnblogs.com/damaoranran/p/8602549.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!