设为首页 加入收藏

TOP

poj 2376 贪心 区间覆盖问题
2015-11-21 01:04:12 来源: 作者: 【 】 浏览:2
Tags:poj 2376 贪心 区间 覆盖 问题

题意:

给n个区间 选择尽量少的区间 覆盖1~T这个区间

如果不能覆盖 输出-1

思路:

经典贪心 区间覆盖

将所有区间按照起点从小到大排序 取终点在最右边的那个区间

code:

?

#include
  
   
#include
   
     #include
    
      #include
     
       #include
      
        #include
       
         #include
        
          #include
          #include
          
            #include
           
             using namespace std; #define INF 0x3f3f3f3f #define PI acos(-1.0) #define mem(a, b) memset(a, b, sizeof(a)) typedef pair
            
              pii; typedef long long LL; //------------------------------ const int maxn = 25005; int n, T; struct node{ int s,e; bool operator < (const node nt) const{ return s < nt.s; } }cow[maxn]; void init(){ for(int i = 0; i < n; i++){ scanf("%d%d",&cow[i].s,&cow[i].e); } sort(cow, cow + n); } void solve(){ if(cow[0].s > 1){ printf("-1\n"); return; } int start_ = 1, end_ = 1, cnt = 1; for(int i = 0; i < n; i++){ if(cow[i].s <= start_) end_ = max(end_, cow[i].e); else{ cnt++; start_ = end_ + 1; if(cow[i].s <= start_) end_ = max(end_, cow[i].e); else{printf("-1\n"); return; } } if(end_ >= T) break; } if(end_ >= T) printf("%d\n",cnt); else printf("-1\n"); } int main(){ scanf("%d%d",&n,&T); init(); solve(); return 0; } 
            
           
          
        
       
      
     
    
   
  

竟错了一次T_T 因为solve函数中最后少判断了一个条件 end >= T......sigh...

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ZOJ 3640 Help Me Escape(概率dp.. 下一篇POJ 1050 动态规划

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: