欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Moving Tables(贪心算法)

程序员文章站 2022-03-26 11:30:41
...

题目描述
著名的ACM公司租用了一幢楼的一层,其形状如下。Moving Tables(贪心算法)
整个楼层在走廊的北面和南面各有300个房间。最近公司制定了一个改变布局的方案,包括在不同房间之间移动许多桌子。由于走廊狭窄,而且桌子都很大,只有一张桌子可以穿过走廊。为了提高工作效率,经理制定了如下方案:把一张桌子从一个房间搬到另一个房间可以在5分钟内完成。当移动一张桌子从I房间搬到J房间时,房间I前面和房间J前面的走廊部分被使用了。因此,在每5分钟,在不共用走廊的情况下,不同的移动方案可以同时进行。为了说明问题,经理举例说明了可能发生的情况和不可能同时发生的情况。
Moving Tables(贪心算法)
对于每个房间,最多一张桌子要么搬进去,要么搬出去。现在,经理要计算移动给定的桌子所需的最短时间。你的工作是写一个程序来解决经理的问题。

输入
输入包括T组测试用例,测试用例的数量M在输入的第一行中给出。每组测试用例的第一行是一个整数N(1<=N<=200),N表示要移动桌子的数量,紧接着是N行,每行包括2个正整数S和T,分别代表一张桌子从S房间移动到T房间(一个房间的序号,在一组测试用例中最多出现一次)。从第N+3行开始,列出了剩余的测试用例,格式和第一个测试用例相同。

输出
输出移动N个桌子所需要的最短时间,每个测试用例结果占一行。

样例输入
3 
4 
10 20 
30 40 
50 60 
70 80 
2 
1 3 
2 200 
3 
10 100 
20 80 
30 50
样例输出
5
10
15
#include<bits/stdc++.h>
using namespace std;
int book[601];

struct node{
	int b,e;
};

int main()
{	
	int T,M;
	cin>>T;
	while(T--)
	{	
		int maxn=-999,maxt=-999;
		memset(book,0,sizeof(book));
		cin>>M;
		node a[M];
		for(int i=0;i<M;i++)
		{	
			cin>>a[i].b>>a[i].e;
			if(a[i].b>a[i].e)
			swap(a[i].b,a[i].e);
			maxt=max(maxt,a[i].e);	
		}
		for(int i=0;i<M;i++)
		{	
			for(int j=a[i].b;j<=a[i].e;j++)
			{
				book[j]+=5;
			}
		}
		for(int i=0;i<=maxt;i++)
		{
			if(book[i]!=0)
			{
				maxn=max(maxn,book[i]);
			}
		}
		cout<<maxn<<endl;
	}
	return 0;
} 
相关标签: c++ 算法