一条oj题目,用C语言(c++不可)写,加注释!

如题所述

貌似是贪心算法,我只说下算法,代码楼主自己实现去吧。

    先从n个任务中选出结束时间最短的一个

    从余下的任务中选择合适的任务(开始时间大于第一个任务的时间)

    从合适的任务中选择结束时间最短的一个。

    重复2步骤

    直到选完,得到答案。

追问

知道总贪心。。。wa了几遍了。。。

追答

你等下啊,等晚上回去了我新自写一遍。

追问

好的。。。

追答 

#include<stdio.h>
#include<stdlib.h>
int gloab=0;

void fun(int* begin,int* end,int n,int last,int big)
{
 int i,s,small=big,sgin=0;
 for(i=0;i<n;i++)
 {
  if (end[i]<=small&&begin[i]>last)
  {small=end[i];s=i;sgin=1;}
 }
 if(sgin)
 {gloab++;
 fun(begin,end,n,end[s],big);
 }
}

int main(){
 int n,i,big;
 while(1)
 {
 gloab=0;
 scanf("%d",&n);
 int *begin,*end;
 begin=(int*)malloc(sizeof(int)*n);
 end=(int*)malloc(sizeof(int)*n);
 for(i=0;i<n;i++)
 scanf("%d %d",&begin[i],&end[i]);
 big=end[0];
 for(i=0;i<n;++i)
 {
  if(end[i]>big)
  big=end[i];
 }
 fun(begin,end,n,0,big);
 printf("%d\n",gloab);
 free(begin);
 free(end);
 }
 return 0;
}

追问

内存超限。。。

改了。。。

追答

内存超了?怎么处理的?

追问

可能是动态分配内存

温馨提示:答案为网友推荐,仅供参考
相似回答