1.题目编号
1000 problemA
2.简单题意
某层楼沿着走廊南北向的两边各有200个房间。公司要做一次装修,需要在各个办公室之间搬运办公桌。由于走
廊狭窄,办公桌都很大,走廊里一次只能通过一张办公桌。要制定计划提高搬运效率。经理制定如下计划:一张
办公桌从一个房间移到另一个房间最多用十分钟。当从房间i移动一张办公桌到房间j,两个办公室之间的走廊都
会被占用。所以,每10分钟内,只要不是同一段走廊,都可以在房间之间移动办公桌。
input
输入数据有m组测试例,在第一行给出测试例个数m。
每个测试例的第一行是一个整数N(1≤N≤200),表示要搬运办公桌的次数。接下来N行,每行两个正整数f和t,
表示一张桌子,是从房间号码f移到到房间号码t。
output
每组输入都有一行输出数据,为一整数s,表示完成任务所花费的最小时间。
3.解题思路
定义测试数目,分步进行每次测试;然后将每个房间之间的走廊作为一个统计单位进行编号,当所有的办公桌都搬运完成
之后,统计这段走廊到底需要占用多少次,然后统计所有的走廊被占用的最大值max,这个值就是要单独安排的搬
运次数,乘以10就是总的搬运时间。
4.感想
上周上课时老师讲过这个问题,根据老师的思路能理解这题的步骤,因此解起来就比较简单,是一种贪心算法的更简单的用法
5.代码
#include<iostream>
#include<mem.h>
using namespace std;
int main()
{
int m,n;
cin>>m;
for(n=0;n<m;n++)
{
int i,j;
int move[200];
int N;
int f,t;
cin>>N;
memset(move, 0, sizeof(move));
for(i=0;i<N;i++)
{
cin>>f>>t;
f=(f-1)/2;
t=(t-1)/2;
if(f>t)
{
int a=f;
f=t;
t=a;
}
for(j=f;j<=t;j++)
move[j]++;
}
int max=0;
for(i=0;i<200;i++)
if(move[i]>max)
max=move[i];
cout<<max*10<<endl;
}
}