贪心
先按结束时间排序,结束时间越早,越能为后面的节目留出时间;
然后,按开始时间选择
从排好序的第一个开始,如果下一个节目b的开始时间 >=当前节目a的结束时间,则+1,并且让当前节目变为b;
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <algorithm>
using namespace std;
struct node
{
int start;
int dead;
}t[110];
bool cmp(node a,node b)
{
return a.dead<b.dead;
}
int main()
{
int n,a;
while(scanf("%d",&n)==1&&n!=0)
{
for(int i=0;i<n;i++)
{
scanf("%d %d",&t[i].start,&t[i].dead);
}
sort(t,t+n,cmp);
a=t[0].dead;
int cnt=1;
for(int i=1;i<n;i++)
{
if(t[i].start>=a)
{
cnt++;
a=t[i].dead;
}
}
printf("%d\n",cnt);
}
return 0;
}还不是很会C++,这里使用C++只是因为快排方便。。。。
本文介绍了一种基于贪心算法解决课程选择问题的方法。通过将课程按结束时间排序并依次选择不冲突的课程,实现了最大数量课程的选择。代码采用C++实现,利用了快速排序进行优化。
703

被折叠的 条评论
为什么被折叠?



