poj 2376 Cleaning Shifts( 贪心 )
来源:互联网 发布:遍历对象数组 编辑:程序博客网 时间:2024/04/24 13:59
题意:给出区间[ 1,T ]和N个小区间,要求用尽可能少的小区间覆盖区间[ 1,T ],输出最少的小区间数量;若不能覆盖,输出-1。
思路:贪心。
具体:令begin为当前未被覆盖的区间起点。
贪心策略:选取包含点begin的区间中右端点最大的那个;若不存在包含begin的区间,输出-1。
#include <iostream>#include <algorithm>using namespace std;const int Max = 25000;// 对象int N, T;struct Interval {int b, e;}I[Max];// 函数bool greater( const Interval & i1, const Interval & i2 ){return i1.b < i2.b;}int Greedy(){int num = 0; // 最少区间数 intright = 0; // 已覆盖区间右端点int top = 0; // 集合首while( right < T ) {// 选出包含begin的区间中右端点最大的那个int begin = right + 1; // 待覆盖的起点for( int i = top; i < N; ++ i ) {if( I[i].b <= begin && I[i].e >= begin )right = I[i].e > right ? I[i].e : right;else if( I[i].b > begin ) {top = i;break;}}// 没有包含begin的区间if( begin > right ) break;else ++ num;}if( right == T ) return num;else return -1;}int main(){scanf( "%d%d", & N, & T );for( int i = 0; i < N; ++ i )scanf( "%d%d", & I[i].b, & I[i].e );sort( I, I + N, greater );printf( "%d\n", Greedy() );return 0;}
转自: http://blog.csdn.net/nvfumayx/article/details/6876989
- poj 2376 Cleaning Shifts( 贪心 )
- POJ 2376 Cleaning Shifts 贪心
- poj 2376 Cleaning Shifts( 贪心 )
- poj 2376 Cleaning Shifts 贪心
- 贪心-poj 2376-Cleaning Shifts
- POJ 2376 - Cleaning Shifts(贪心)
- Cleaning Shifts - POJ 2376 贪心
- Cleaning Shifts (poj 2376 贪心)
- Cleaning Shifts - POJ 2376 贪心
- [贪心] poj 2376 Cleaning Shifts
- [贪心] poj 2376 Cleaning Shifts
- POJ 2376 Cleaning Shifts [贪心]
- Poj 2376 Cleaning Shifts【贪心】
- POJ 2376 Cleaning Shifts 贪心
- POJ 2376 Cleaning Shifts(贪心)
- POJ 2376 Cleaning Shifts 贪心
- POJ 2376 Cleaning Shifts(贪心)
- 【贪心+排序】poj 2376 Cleaning Shifts
- HDU 1452 Happy 2004(因子和)
- php怎么不让html效果显示而是直接显示代码
- java基础入门----Collections.reverseOrder
- CSS Media Query
- 微信公众平台开发__微信的关注事件
- poj 2376 Cleaning Shifts( 贪心 )
- 《失控》书摘
- sscanf用法
- 云计算技术
- [2014创新工场笔试]求一个正数的开方,不能使用库函数sqrt,精度在0.001以内即可
- 解决无法定位程序输入点SymEnumSymbols于动态链接库dbghelp.dll
- CentOS下安装CodeBlocks
- HDU-4118-Holiday's Accommodation
- 女生游泳的时候水会进入阴道内吗?