分析:该題可以用贪心来做,类似于节目时间安排的问题,桌子的移动房间看作时间处理。
下面是另一种更简便的做法。把奇数房间号和偶数房间号映射为房间在走廊上的位置,从1到200;开一个数组,每次从s移桌子到t就把中间走廊的每个位置都加1,最后扫描整个数组,找出最大值在乘上移动一张桌子所用的时间就是必须花费的时间。
#include<iostream>
using namespace std;
int roompos[202];
int GetRoomPos(int n)
{
if(n&1) return (n+1)/2;
else return n/2;
}
int main()
{
int T,N,s,t,i,j,max,maxpos,minpos;
cin>>T;
while(T--)
{
cin>>N;
memset(roompos,0,sizeof(roompos));
maxpos=-1;
minpos=10000;
for(i=0;i<N;i++)
{
cin>>s>>t;
if(s>t)
{
int tmp=s;
s=t;
t=tmp;
}
maxpos=maxpos>GetRoomPos(t)?maxpos:GetRoomPos(t);
minpos=minpos<GetRoomPos(s)?minpos:GetRoomPos(s);
for(j=GetRoomPos(s);j<=GetRoomPos(t);j++)
roompos[j]+=1;
}
max=0;
for(i=minpos;i<=maxpos;i++)
max=max>roompos[i]?max:roompos[i];
cout<<max*10<<endl;
}
return 0;
}HDU ACM 1050 Moving Tables->贪心或者?
原文地址:http://blog.csdn.net/a809146548/article/details/45371569