c/c++算法之贪心与DP

来源:互联网 发布:mac怎么设置屏幕刷新率 编辑:程序博客网 时间:2024/06/07 09:36

题目背景: 那一年,这一年,青春散场,到毕业季,我们奔波着忙着找工作,来到招聘会上,看到黑压压的一大片人群.. 题目描述:毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开)。 假设现在有n个招聘会,每个招聘会都有个起止时间,时间由从招聘会第一天0点开始的小时数表示,n <= 1000 。 返回:最多参加的招聘会的个数n。 举个例子: 现在有3场招聘会,他们的起始时间为: 9-10 10-20 8-15 返回:2

这是英雄会的一个挑战题

下面是个人的实现方法,仅供参考,如有bug或者意见欢迎提出,共同交流

#include <cmath>#include <cstdio>#include <vector>#include <iostream>#include <algorithm>using namespace std;bool cmp(const pair<int,int> &tmpa,const pair<int,int> &tmpb ){   if (tmpa.second<tmpb.second)   {   return 1;   }   else if (tmpa.second==tmpb.second)   {    if (tmpa.first<tmpb.first)   {   return1;   }   else   return false;   }  else   return 0;//return tmpa.second<tmpb.second;}int forjob(vector<pair<int,int> > &time) {       sort(time.begin(),time.end(),cmp);//返回能参加的招聘个数的数值n   int countNum=0;   int endNum=-1;   int SizeNum=time.size();   for (int i=0;i<SizeNum;i++)   {   if (endNum<=time[i].first)   {   endNum=time[i].second;   countNum++;   }   }return countNum;}bool operator<(const pair<int,int> &tmpa,const pair<int,int> &tmpb){if (tmpa.second<tmpb.second){return true;}else if (tmpa.second==tmpb.second){ if (tmpa.first<tmpb.first){return true;}}elsereturn false;}int _tmain(int argc, _TCHAR* argv[]){vector<pair<int,int> > TimePair;pair<int,int> num1(2,8);pair<int,int> num2(3,4);pair<int,int> num3(2,5);pair<int,int> num4(5,8);pair<int,int> num5(8,20);TimePair.push_back(num4);    TimePair.push_back(num1);TimePair.push_back(num2);TimePair.push_back(num3);TimePair.push_back(num5);int Num=forjob(TimePair);cout<<Num<<endl;return 0;}


 

原创粉丝点击