题目出得不严密,题目要求是“计算安排的活动最多时会场使用时间”,但当“安排的活动最多”有多种安排方式,题目中却没说输出这多种方式中的哪一种的会场使用时间。例如 :当有3项活动要安排,开始时间和结束时间分别是1 2、3 5、4 5,这时可以安排第一项和第二项活动,也可以安排第一项和第三项活动,前者的会场使用时间是5,后者是4,这时是输出4还是5,题目中没用指出。先假设测试数据不会出现上述情况,则利用贪心算法求解活动安排问题是一种最常用的方法:#include<stdioh>
#include<stdlibh>
struct activity
{
int start;
int end;
}act[8501];
int comp(const void p, const void q)
{
struct activity a=(struct activity )p;
struct activity b=(struct activity )q;
return a->end-b->end;
}
int main()
{
int i,k,res,e;
while(scanf("%d",&k)!=EOF)
{
for(i=0;i<k;i++) scanf("%d%d",&act[i]start,&act[i]end);
qsort(act,k,sizeof(act[0]),comp);
res=act[0]end-act[0]start+1;
e=act[0]end;
for(i=1;i<k;i++)
{
if(act[i]start>e)
{
res+=act[i]end-act[i]start+1;
e=act[i]end;
}
}
printf("%d\n",res);
}
return 0;
}
比如:
int a=3,b=4,c;
c=a+++b;
将被解释为
c=(a++)+b;
而不会被解释为
c=a+(++b);
贪心算法的主要意义是从左至右依次解释最多的符号!
以上就是关于C语言程序问题——活动安排问题全部的内容,包括:C语言程序问题——活动安排问题、求C语言或c++的贪心算法的例题、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)