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;
}
这是一道贪心算法的入门题目,我们再选下一个节目时首先保证他开始的时间要在上一个节目结束之后,然后从所有符合条件的节目当中
选取结束时间最早的即可; 但是这里可以优化一下,首先按照每个节目结束的时间排序,然后当我们检索到的第一个开始时间符合条件的
节目即使每个子问题的最优解。