题目
农夫约翰为他的牛开设了一个游泳池,他认为这将帮助它们放松并产出更多的奶。
为了确保安全,他雇佣了 N 头奶牛作为救生员,每头奶牛的工作班次都是一段连续的时间。
为了简单起见,游泳池每天的开放时间从时刻 0 到时刻 1000。
每个奶牛的工作班次都可以用两个整数来描述,它们分别表示该奶牛工作班次的开始时刻和结束时刻。
例如,从时刻 t=4 开始工作并在时刻 t=7 结束工作的救生员,它的工作时间为三个时间单位(请注意,时间“段”两端的端点是时间轴上的“点”)。
不幸的是,由于资金紧张问题,约翰不得不解雇一头奶牛。
请问通过合理裁员,剩余救生员的工作班次仍然可以覆盖的最大时间有多长?
一个时间间隔内如果存在至少一名救生员当值,那么这个时间间隔就认为是被覆盖的。
代码
import java.util.*;
public class Main {
static int N = 100010;
static int n, ans = 0;
static boolean[] f = new boolean[1010];
static node[] a = new node[110];
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
n = inScanner.nextInt();
for(int i = 0; i < n; i ++)
a[i] = new node(inScanner.nextInt(), inScanner.nextInt());
for(int i = 0; i < n; i ++)
{
Arrays.fill(f, false);
int sum = 0;
for(int j = 0; j < n; j ++)
{
if(i != j)
{
int l = a[j].l;
int r = a[j].r;
while(l < r)
{
if(!f[l])
{
f[l] = true;
sum ++;
}
l ++;
}
}
}
ans = sum > ans ? sum : ans;
}
System.out.println(ans);
inScanner.close();
}
}
class node
{
int l, r;
public node(int l, int r)
{
this.l = l;
this.r = r;
}
}