救生员


题目

链接:1750. 救生员 - AcWing题库

农夫约翰为他的牛开设了一个游泳池,他认为这将帮助它们放松并产出更多的奶。

为了确保安全,他雇佣了 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;
    }
}

文章作者: 姜小白
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 姜小白 !
评论
  目录