Select Code
#include<iostream>
using namespace std;
int main()
{
int n;
while (cin >> n&&n)
{
int a[101][3];
for (int i = 1; i <= n; i++)
{
cin >> a[i][1];
cin >> a[i][2];
}
for (int i = 1; i < n; i++)
{
int min = a[i][2], c = i;
for (int j = i; j <= n; j++)
{
if (a[j][2] < min)
{
min = a[j][2]; c = j;
}
}
int d; d = a[i][2]; a[i][2] = min; a[c][2] = d;
int e; e = a[i][1]; a[i][1] = a[c][1]; a[c][1] = e;
}
int f = 1, g = 1, h=1;
for (int i = f; i <= n; i++)
{
if (a[i][1] >= a[h][2])
{
g++;
f = i + 1;
h = i;
}
}
cout << g << endl;
}
return 0;
}这是一道贪心算法的入门题目,我们再选下一个节目时首先保证他开始的时间要在上一个节目结束之后,然后从所有符合条件的节目当中选取结束时间最早的即可; 但是这里可以优化一下,首先按照每个节目结束的时间排序,然后当我们检索到的第一个开始时间符合条件的节目即使每个子问题的最优解。
本文介绍了一个基于贪心算法的选课问题解决方案,通过排序和迭代的方式选择最早结束且不冲突的课程,实现了资源的有效利用。

2983

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



