zoukankan      html  css  js  c++  java
  • C++ 活动安排

    试题描述:

    设有 n 个活动的集合 E={1,2,……,n},其中每个活动都要求使用统一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动 i 都有一个要求使用该资源的起始时间 si 和一个结束时间 fi ,且 si < fi。如果选择了活动 i ,则它在时间区间 [si, fi) 内占用资源。若区间 [si, fi) 与 [sj, fj) 不相交,则称活动 i 与活动 j 是相容的。也就是说,当 fi<=sj 或 fj<= si 时,活动 i 与活动 j 相容。选择出由互相兼容的活动组成的最大集合。

    输入:

    第一行一个整数 n ;
    接下来 n 行,每行两个整数 si 和 fi。

    输出:

    输出尽可能多的互相兼容的互动个数。

    输入示例:

    4
    1 3
    4 6
    2 5
    1 7

    输出示例:

    数据范围:n <= 1000.

    #include<iostream>
    using namespace std;
    int n,begin[1001],end[1001];
    void init()//初始化 
    {
    	cin>>n;
    	for(int i=1;i<=n;i++)
    	{
    		cin>>begin[i]>>end[i];//开始与结束时间 
    	}
    }
    	void qsort(int x,int y)//排序 从小到大 
    	{
    		int i,j,mid,t;//mid为中间值 
    		i=x;j=y;mid=end[(x+y)/2];
    		while(i<=j)
    		{
    			while(end[i]<mid)i++;//快速排序 
    			while(end[j]>mid)j--;//快速排序 
    			if(i<=j)
    			{
    				t=end[j];end[j]=end[i];end[i]=t;//从小到大排序 
    				t=begin[j];begin[j]=begin[i];begin[i]=t;//从小到大排序 
    				i++;j--;
    			}
    		}
    		if(x<j)qsort(x,j);
    		if(i<y)qsort(i,y);
    	}
    	void solve()
    	{
    		int ans=0;
    		for(int i=1,t=-1;i<=n;i++)
    		if(begin[i]>=t)//活动二的开始 开始比活动一的结尾小 
    		{
    			ans++;
    			t=end[i];//记录当前活动的结束时间 
    		}
    		cout<<ans;
    	}
    	int main()
    	{
    		init();
    		qsort(1,n);
    		solve();
    		return 0;
    	}
    

      这道题和活动选择是基本相同的。

    在写这道题的时候,先要排序。

    排序的方法有桶排序,快速排序。。。。

    给一个快排

    #include<iostream>
    using namespace std;
    int a[1000],n=0,p,z,flag=0; 
    void qsort(int x,int y)
    {
    	 int i=x,j=y,mid=a[(x+y)/2];
    	while(i<=j)
    	{
    		while(a[i]<mid)i++;
    	    while(a[j]>mid)j--;
    	    if(i<=j)
    	    {
    	    	swap(a[i],a[j]);
    	    	i++;
    			j--;
    		}
    	}
    	if(x<j)qsort(x,j);
    	if(i<y)qsort(i,y);
    }
    int main()
    {
    	while(scanf("%d",&p)==1)
    	{
    		n++;
            a[n]=p;		
    	}
    	qsort(1,n);
    	for(int m=1;m<=n;m++)
    	{
    		if(m==n)
    		{
    				cout<<a[m];
    		}
    	    else cout<<a[m]<<" ";
    	}
    	return 0;	
    }
    

      

  • 相关阅读:
    理解cookie
    浏览器解析url后执行过程
    如何使用D3绘制折线图
    Django 笔记
    vi命令
    PEP8编程规范
    Python_入门第一篇【持续更新...】
    DjangoWeb _ 登录页开发test
    Django开发流程
    Django 笔记2018.2.7
  • 原文地址:https://www.cnblogs.com/FXY-180/p/9480802.html
Copyright © 2011-2022 走看看