杭电2037

来源:互联网 发布:打电话时变声软件 编辑:程序博客网 时间:2024/05/31 06:21

先将数据按起始时间排序,然后通过循环选出据前一个确定的元素距离最小的元素作为下一个确定的元素,以此类推,算出每种情况中最多的个数

要另做一个循环来算出从第一个元素开始每个元素做第一个确定的元素时的最多个数,再从中选出最大值

#include<iostream>
using namespace std;
int main()
{
 int max(int a,int b);
 void paixu(int n,int a[],int b[]);
 int n;
 while(cin>>n&&n!=0)
 {
  int a[100],b[100],i,j,sum,k,m=0,s,c,minnum;
  for(i=0;i<n;i++)
  {
   cin>>a[i]>>b[i];
  }
  paixu(n,a,b);//排序
  for(i=0;i<n;i++)
  {
   k=1;
   s=i;
   for(j=i+1;j<n;j++)
   {
    if(a[j]>=b[s])
    {
     k++;
     minnum=b[j];
     for(c=j+1;c<n;c++)
     {
      if(b[c]<minnum)
      {
       minnum=b[c];
       s=c;//记录最小元素的下标 *******注意
       j=c;//将下一次循环从选中的那个元素开始
      }
      else
      s=j;//******注意
     }
    }
   }
   m=max(m,k);
  }
  cout<<m<<endl;
 }
}
void paixu(int n,int a[],int b[])
{
 int c;
 for(int i=0;i<n;i++)
 {
  for(int j=i+1;j<n;j++)
  {
   if(a[i]>a[j])
   {
    c=a[i];
    a[i]=a[j];
    a[j]=c;
    c=b[i];
    b[i]=b[j];
    b[j]=c;
   }
  }
 }
}
int max(int a,int b)
{
 if(a>b) return a;
 else return b;
}

原创粉丝点击