问题描述
解析
下面是另外两种贪心算法无法实现最优的反例
核心代码
#include<stdio.h>
typedef struct{
int s;
int f;
}l;
int main()
{
l list[100];
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d %d",&list[i].s,&list[i].f);
}
for(int i=0;i<n-1;i++) //对活动结束时间从前到后排序
{
for(int j=0;j<n-1-i;j++)
{
l temp;
if(list[j].f>list[j+1].f)
{
temp=list[j];
list[j]=list[j+1];
list[j+1]=temp;
}
}
}
int k=0;
for(int i=0;i<n;i++) //对于和前面的活动相容的活动输出
{
if(i>0)
{
if(list[i].s>list[k].f)
{
k=i;
printf("活动%d:%d->%d\n",i,list[i].s,list[i].f);
}
}
else
{
printf("活动%d:%d->%d\n-",i,list[i].s,list[i].f);
}
}
}
复杂度
T(n)=O(n)
github源码
https://github.com/1651928813/Pepsi_juice/tree/master/%E4%BD%9C%E4%B8%9A%E5%8D%81