Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 7116 | Accepted: 2852 |
Description
Write a program that: finds the minimal number of elements in a set containing at least two different integers from each interval.
Input
Output
Sample Input
4 3 6 2 4 0 2 4 7
Sample Output
4
Source
/*
贪心算法:
先对所有区间按照左端点非降序排序,然后依次处理每个区间,total表示需要的总的点数,期间
用curF, curT分别表示在当前最优情况下,上一个区间取的两个最靠右侧的端点,即curF和curT
可以覆盖当前区间且都不能再往右边挪动了,那么对于下一个区间seg[f, t]按照如下情况处理
(1)f > curT
则curF,curT不能覆盖当前区间,对于当前区间需要增加两个点分别为 curF = t -1, curT = t,即尽量往右取
(2)f <= curT && f > curF,由于curF不能再往右边挪动寻找替换点,因此需要增加一个点:
a. 若curT >= t,增加新点 curF = t - 1,将curT挪到t代替原来的curT
b.若curT < t,用curT代替curF, 增加新点 curT = t
(3)f < curT ,由于上一个区间的左端点肯定位于当前区间左端点的非右侧,所以肯定可以通过挪动curF来为当前区间所用而不影响前一个区间,同理如果需要肯定可以通过挪动curT来为当前区间所用而不影响前一个区间
a. t <= curF, 挪动curF为t-1,挪动curT为t
b. curF < t <= curT,curF不用动,挪动curT到t
c. t > curT,curF, curT均不用替换
*/