高效率的安排见面会问题

     某一天,在微软亚洲研究院有N个面试要进行,它们的时间分别为(B[i], E[i])(B[i]为面试开始时间,E[i]为面试结束时间)。假设一个面试者一天只参加一个面试。为了给面试者提供一个安静便于发挥的环境,我们希望将这N个面试安排在若干个面试点。不同的面试在同一个时间不能被安排在同一个面试点。如果你是微软亚洲研究院的HR,现在给定这N个面试的时间之后,你能计算出至少需要多少个面试点吗?

    编程之美给的解答如下:

    int nMaxColors=0,i,k,j;
    for(i=0;i<n;i++)  
    {  
        for(k=0;k<nMaxColors;k++)  
            isForbidden[k]=false;  
        for(j=0;j<i;j++)  
            if(isoverlap(b[j],e[j],b[i],e[i])) 

                 isForbidden[color[j]]=true;  

        for(k=0;k<nmaxcolor;k++)  
            if(!isforbidden[k])

                   break;              //这里的意思是如果这个面试和前面每一个面试都冲突的话,跳出循环,从而使k=nMaxcolors,这样颜色数加一
        if(k<nMaxcolors)

           color[i]=k;  
        else

           color[i]=nmaxcolor++;            
    }  
    cout<<nmaxcolor<<endl;  

第二种解法需要注意的地方是:

       if(nColorUsing>Maxcolor)

          MaxColor =nColorUsing; //这里的意思是得到整个遍历过程中最大达nColorUsing值便是需要的颜色值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值