【线段上】简单贪心总结……未完

struct point{

  node a, b;

}p[N];

 

1、选择不相交区间

  【例1】数轴上有n个开区间(ai,bi)。选择尽量多个区间,使得这些区间两两没有公共点。

  【Solution】

  bool cmp(point x, point y){

    if(x.b!=y.b)

      return x.a<y.a;

    else

      return x.b<y.b;

  }

  sort(p,p+n,cmp);

   再一次选区间

 

2、区间选点问题

  【例2】数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

  【Solution】排序方式:所有区间按b从小到大排序(b相同时a从大到小排序),选点时选未覆盖点的区间的右端点。

 

3、区间覆盖问题

  【例3】数轴上有n个闭区间[ai,bi]。选择尽量少的区间覆盖一条指定线段[s,t]。

  【Solution】首先进行预处理,在[s,t]外部的线段全部除去。各区间按a从小到大排序(a相同时b从大到小排序)

        不断用已选择的区间右端点bi更新要覆盖线段的起点,知道已知线段被全部覆盖。

posted @ 2012-01-26 15:33  celia01  阅读(551)  评论(0编辑  收藏  举报