码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-03-19 16:42:10      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:相同   turn   std   修改   end   private   include   开始   ==   

#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;
}

 

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

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

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

标签:相同   turn   std   修改   end   private   include   开始   ==   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!