方法:贪心
思想:先将需要进行的任务进行排序(先开始的优先,先结束的优先),
然后每次找尽量多的可以同时进行的任务,最后看找了几次,将其乘以
10,便是答案。需要注意的是 由于房间编号的次序是左边一个右边一个,
以此类推,因此当出现 如 (1)12 25 (2)26 30 这两个任务时不能
同时进行,因为25,26是共用走廊的。
代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
struct node
{int x,y; };
bool cmp(node a,node b)
{
if(a.x!=b.x) return a.x<b.x;
return a.y<b.y;
}
int main()
{
node table[405];
bool visited[205];
int t,n;
cin>>t;
while(t--)
{
cin>>n;
int a,b,tmp,i,ans=0;
memset(visited,0,sizeof(visited));
for(i=0;i<n;i++)
{
cin>>a>>b;
if(a>b){ tmp=a;a=b;b=tmp; }
table[i].x=a;table[i].y=b;
}
sort(table,table+n,cmp);
while(1)
{
for(i=0;i<n;i++)
if(visited[i]==0)break;
if(i==n)break;
tmp=i;visited[tmp]=1;
for(i=tmp+1;i<n;i++)
if(visited[i]==0&&table[i].x>table[tmp].y)
{ if(table[tmp].y%2&&table[tmp].y+1==table[i].x)continue;
visited[i]=1;tmp=i;
}
ans++;
}
cout<<ans*10<<endl;
}
return 0;
}