贪心算法之区间重叠问题(moving tables)
程序员文章站
2023-12-31 14:48:28
...
接法(1)
思路:对于本题的求解,我们可以先求出移动桌子时,经过每间房间的次数,继而求出经过其中一个房间的最大次数,将桌子从一个房间移到另一个房间可以在10分钟内完成,因为每个房间移动桌子的路线不能重叠,所以最大次数*10就是所需的时间。
注(
1 memset函数:是对数组每个值进行清0;
2 因为房间共400个,但都是对称排列,对于小的一个房间号,如果是从偶数的序号开始,那么一定经过对应的奇数号房间,故要减1。那你们可能要问,如果小的房间号如果是奇数呢?奇数我们不用进行操作,因为它相对的就是一个偶数房间,对应的偶数房间恰好比它大。
对于大的房间号,如果是奇数,那么要加1,原因同上。
)
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,c,d,i,j,s[401],e,t;
scanf("%d",&a);
while(a--)
{
e=0;
memset(s,0,sizeof(s));
scanf("%d",&b);
for(i=1;i<=b;i++)
{
scanf("%d%d",&c,&d);
if(c>d)
{
t=c;
c=d;
d=t;
}
if(c%2==0)
c--;
if(d%2!=0)
d++;
for(j=c;j<=d;j++)
{
s[j]++;
}
}
for(i=1;i<=400;i++)
{
if(s[i]>e)
e=s[i];
}
printf("%d\n",e*10);
}
return 0;
}
(希望可以帮助你们~)