题目大意:
ACM公司租了一层下面形状的公寓
这一层北侧和南侧有200个房间。最近公司想要重新组合系统,要在房间之间移动桌子。因为走廊很窄,所有的桌子很大,只有一个桌子可以通过走廊。为了使移动有效率,经理想出一个计划:把桌子从一个房间移到另一个房间需要10分钟,当移动不共用走廊时可以同时进行。如下:
写一个程序最小化移动时间
解题思路:
贪心算法。用map数组记录公用的走廊长度,然后选出重叠次数最大的元素
代码如下:
#include<iostream>
using namespace std;
#define MAXN 201
int map[MAXN];
void solve()
{
int temp;
int i,n,start,end,m;
for(i=0;i<MAXN;i++)
map[i]=0;
cin>>n;
while(n--)
{
cin>>start;
cin>>end;
if(start>end)
{
temp=start;
start=end;
end=temp;
}
for(i=(start+1)/2;i<=(end+1)/2;i++)
map[i]+=1;
}
m=map[1];
for(i=2;i<MAXN;i++)
{
if(map[i]>m)
m=map[i];
}
cout<<m*10<<endl;
}
int main()
{
int t;
cin>>t;
while(t--)
solve();
return 0;
}