题目描述
农场主约翰为他的奶牛开设了一个游泳池,认为这将有助于它们放松并生产更多的牛奶。
为了确保安全,他雇用了N奶牛作为救生员,每个奶牛都有一个班次,涵盖白天的一些连续时间间隔。为简单起见,游泳池不时开放t=0直到时间t=1 0 0 0因此,每个班次可以用两个整数来描述,给出奶牛开始和结束班次的时间。例如,救生员从时间开始t=4并在时间结束t=7涵盖三个时间单位(请注意,端点是时间上的“点”)。
不幸的是,农民约翰雇用了 1 名救生员,而不是他有足够的资金来支持。鉴于他必须解雇一名救生员,其余救生员的轮班仍然可以覆盖的最长时间是多少?如果至少有一名救生员在场,则涵盖一段时间间隔。
输入格式
输入的第一行包含N(1≤不≤1 0 0).接下来的 N 行中的每一行都以范围内的两个整数来描述救生员0...10000...1 0 0 0,给出救生员轮班的起点和终点。所有这些端点都是不同的。不同救生员的班次可能会重叠。
输出格式
请写一个数字,给出如果 Farmer John 解雇 1 名救生员仍然可以覆盖的最大时间。
题意翻译
给定 n 个区间,问在去掉任意一个区间的情况下,区间的覆盖长度最大是多少。
输入输出样例
输入 #1复制
3
5 9
1 4
3 7
输出 #1复制
7
思路:
暴力判断,循坏n个编号,把除了这个编号的区间都放进去,判断最大值以便决定去掉哪个编号
代码:
#include <iostream>
using namespace std;
int a[1001],minlen;
struct jus{
int x,y;
}jus[101];
int main()
{
int n,ans;cin>>n;
for(int i=1;i<=n;i++){
cin>>jus[i].x>>jus[i].y;
}
for(int i=1;i<=n;i++){
int cnt=0;
for(int k=0;k<=1000;k++) a[k]=0;
for(int j=1;j<=n;j++){
if(i==j)continue;
for(int e=jus[j].x;e<jus[j].y;e++)a[e]=1;
}
for(int m=0;m<=1000;m++){
if(a[m]==1) cnt++;
}
ans=max(ans,cnt);
}
cout<<ans;
return 0;
}