赞
踩
会议室安排
输入:一组会议的其实终止时间比如[7,8],[8,10],[9,12][10,15]..就一个会议室,如何安排会议室的利用率最高。
输出:安排会议的个数,或者是安排了哪些会议。此时返回3 ,[7 8][8 10][10 15]
思路:按结束时间排序
数据多时用小根堆
上代码:
- /*
- 贪心1 会议室安排
- 小根堆
- */
- class Program {
- public:
- int m_start;
- int m_end;
-
- Program(int start, int end) {
- m_start = start;
- m_end = end;
- }
- bool operator < (const Program n) const
- {
- return m_end>n.m_end;
- }
- };
- bool compUp(Program p1, Program p2)
- {
- return p1.m_end < p2.m_end;
- }
- bool compDown(Program p1, Program p2)
- {
- return p1.m_end >p2.m_end;
- }
-
- int bestArrange(Program inPs[], int m_num,int timepoint)
- {
- sort(inPs, inPs + m_num, compUp); //1.按end时间排序
- for (int i = 0; i < m_num; i++)
- {
- cout<<"inPs[i] start="<<inPs[i].m_start<<",,,,,,end="<<inPs[i].m_end<<endl;
- }
- int result = 0;
- cout <<"******************"<<endl;
- for (int i = 0; i < m_num; i++) //2.遍历所有的会议
- {
- if (timepoint <= inPs[i].m_start) //3.当前时间
- {
- result++;
- timepoint = inPs[i].m_end; //4.当前时间=会议结束时间
- cout << "inPs[i] start=" << inPs[i].m_start << ",,,,,,end=" << inPs[i].m_end << endl;
- }
- }
- return result;
- }
- void BestArrange_main_test()
- {
- Program parr[5] = { Program(7, 8),Program(8,10),Program(9, 12),Program(10,15) ,Program(7, 15)};
- int m_rc = bestArrange(parr,5,7);
- cout<<"返回的值:m_rc="<< m_rc<<endl;
-
-
- }
-
- void BestArrange_main()
- {
- cout<<"*********BestArrange_main************"<<endl;
- BestArrange_main_test();
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。