• 编程之美----高效率地安排见面会----贪心策略


    每一个面试是一个整数的闭区间【Bi,Ei】表示开始时间和结束时间,有N个面试要进行,求最少的面试点。

    思路:按开始时间排序,使用贪心策略,每一个面试使用一个最小的正整数k来表示可行的颜色,当然如果重叠了就必须使用一个新的颜色。

    c++实现:

    #include <iostream>
    #include <vector>
    #include <algorithm>
    using namespace std;
    struct meeting{
    	int b,e;
    }m[101];
    bool cmp(meeting x,meeting y)//用于排序的谓词函数,这里没有抽象成为函数对象
    							//而是简单使用函数指针 
    {
    	return x.b<y.b;
    }
    bool isoverlap(meeting &x,meeting &y)
    {
    	if(x.e<=y.b || x.b>=y.e)return 0;
    	else return 1;
    }
    bool isforbidden[101];
    int color[101];
    int main()
    {
    	int n=4;
    	m[0].b=1;m[0].e=5;m[1].b=2;m[1].e=3;m[2].b=3;m[2].e=4;m[3].b=3;m[3].e=6;
    	sort(m,m+4,cmp);
    	int nmaxcolor=0,k;
    	for(int i=0;i<n;i++)
    	{
    		for(k=0;k<nmaxcolor;k++)
    			isforbidden[k]=0;
    		for(int j=0;j<i;j++)
    			if(isoverlap(m[j],m[i]))isforbidden[color[j]]=1;
    		for(k=0;k<nmaxcolor;k++)
    			if(!isforbidden[k])break;
    		if(k<nmaxcolor)color[i]=k;
    		else color[i]=nmaxcolor++;			
    	}
    	cout<<nmaxcolor<<endl;
    	return 0;
    }  


  • 相关阅读:
    python 变量作用域
    python 函数与模块
    python 程序控制结构
    python zip() map() filter()
    python 迭代和列表解析
    python 字典视图
    Matlab程序设计
    Matlab 基本绘图练习 包含极坐标
    Matlab 软件绘图
    Pandas 控制输出格式和精度
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3177985.html
Copyright © 2020-2023  润新知