算法竞赛学习日记(3)——区间选点问题
来源:互联网 发布:浙江大学数学系 知乎 编辑:程序博客网 时间:2024/06/04 23:31
数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。
贪心策略:
按照b1<=b2<=b3…(b相同时按a从大到小)的方式排序排序,从前向后遍历,当遇到没有加入集合的区间时,选取这个区间的右端点b。
证明:
为了方便起见,如果区间i内已经有一个点被取到,我们称区间i被满足。
1、首先考虑区间包含的情况,当小区间被满足时大区间一定被满足。所以我们应当优先选取小区间中的点,从而使大区间不用考虑。
按照上面的方式排序后,如果出现区间包含的情况,小区间一定在大区间前面。所以此情况下我们会优先选择小区间。
则此情况下,贪心策略是正确的。
2、排除情况1后,一定有a1<=a2<=a3……。
这里的核心思想是,你需要将第一个区间的后端点作为demo去做比较,当下一个区间的前端点比demo要小或者相等的时候,这个区间就不用被标定为新的demo,继续取下一个区间作比较,直至做完所有的比较,将去的所有后端点存在一个vector中输出就可以了。
using namespace std;bool compsecond(const pair<int, int> a, const pair<int, int> b){ return a.second < b.second;}bool compfirst(const pair<int, int> a, const pair<int, int> b){ return a.first > b.first;}int main(){ cout << "please input the blocks" << endl; vector<pair<int, int> > vec; vector<int> vec_selected; int n(0); int fir(0); int sec(0); pair<int, int> ipair; while (cin >> fir >> sec) { ipair.first = fir; ipair.second = sec; vec.push_back(ipair); n++; } sort(vec.begin(), vec.end(), compfirst); sort(vec.begin(), vec.end(), compsecond); vec_selected.push_back(vec.at(0).second); int comp_demo = vec.at(0).second; for (int i(1); i < n; ++i) { if (comp_demo >= vec.at(i).first) continue; else if (comp_demo < vec.at(i).first) { comp_demo = vec.at(i).second; vec_selected.push_back(comp_demo); } } for (vector<int>::iterator ivec(vec_selected.begin()); ivec != vec_selected.end(); ++ivec) { cout << *ivec << ","; } system("pause"); return 0;}
阅读全文
1 0
- 算法竞赛学习日记(3)——区间选点问题
- 算法竞赛学习日记(2)——区间问题
- 贪心——区间选点的算法
- 贪心法——区间选点问题
- 区间选点问题(贪心)
- 区间选点问题(贪心)
- 区间选点问题(贪心)
- 算法竞赛学习日记(1)——“贪心法”
- 步步为营(四)贪心(3)区间选点问题
- ACM知识点 之 贪心(3)区间选点问题
- 贪心算法-区间选点
- POJ1328 区间选点问题(贪心)
- uva 10148 - Advertisement(区间选点问题)
- NYOJ1036 非洲小孩(区间选点问题)
- 贪心(2)区间选点问题
- UVA - 10148 Advertisement(区间选点问题)
- 区间选点问题(找点)
- 区间选点问题【贪心】
- C#字符串
- 分享一个MySQL死锁问题解决的方法
- iOS开发 引用第三方库出现duplicate symbol时的处理方法
- Apache2.2+Tomcat7.0整合配置详解
- Linux ALSA声卡驱动之四:Control设备的创建
- 算法竞赛学习日记(3)——区间选点问题
- android音频(一)
- csdn如何转载别人的文章
- jdbcTemplate实现查询操作
- 2017学习HTML之路
- 第七周 项目1
- 【第七周项目2】建立链队算法库
- 2017第21届健博会暨第五届中国国际酵素产品展览会会刊(参展商名录)
- UncategorizedSQLException异常处理办法