贪心算法1000

题目大意:

有若干房间,奇数房间在偶数房间的对面,共用一条走廊,从一个房间搬运桌子到另一个房间,如果房间之间共用同一个走廊,则不能同时进行,搬运以此需要10,求最短时间;

解题思路:

首先对房间按照开始房间号进行排序,在进行化简,1号和二号房间共用同一个走廊,开始房间和结束房间加一除二为走廊,搬桌子可以并行执行,遇到冲突需要分别执行,记录冲突最多的走廊为所求结果;

代码:

#include <iostream>
#include <algorithm>
using namespace std;
struct mm
{
    int a;
    int b;

}s[401];
bool cmp(mm m,mm n)
{
    if(m.a<=n.a)
    return true;
    return false ;
}
int main()
{
    int n,N,u,i,j,max[201],t=0;

    cin>>N;
    while(N-->0)
    {
        for(int p=0;p<200;p++)
        max[p]=0;
        t=0;
        cin>>n;
        for(i=0;i<n;i++)
        {
            cin>>s[i].a>>s[i].b;
            if(s[i].a>s[i].b)
            {

                u=s[i].a;
                s[i].a=s[i].b;
                s[i].b=u;
            }
            s[i].a=(s[i].a+1)/2;
            s[i].b=(s[i].b+1)/2;
            for(j=s[i].a;j<=s[i].b;j++)
            max[j]++;
        }

            for(i=0;i<200;i++)
            {
                if(max[i]>t)t=max[i];
            }

        cout<<t*10<<endl;

    }
    return 0;
}

 

posted @ 2016-03-20 17:12  Si考者  阅读(147)  评论(0编辑  收藏  举报