
题目链接:https://vjudge.net/contest/121192#problem/J
此题要求是计算能够看到最多的节目 ,贪心算法即可,首先对结束时间排序,然后在把开始的时间和前面的结束时间比较 如果开始时间大于前面的结束的时间就可以记一次,然后在慢慢累计
ac代码:
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int main()
{
int t, i, s, start, a[][], tt,j;
while (cin >> t && t != )
{
for (i = ; i < t; i ++)
cin >> a[i][] >> a[i][];
for (i = ; i < t - ; i ++) //对结束时间排序 如果相等就对开始时间从小到大排序
for (j = i + ; j < t; j ++)
{
if (a[i][] > a[j][])
{
tt = a[i][]; a[i][] = a[j][]; a[j][] = tt;
tt = a[i][]; a[i][] = a[j][]; a[j][] = tt;
}
if (a[i][] == a[j][])
{
if (a[i][] > a[j][])
{
tt = a[i][]; a[i][] = a[j][]; a[j][] = tt;
tt = a[i][]; a[i][] = a[j][]; a[j][] = tt;
}
}
}
s = ; start = ;
for (i = ; i < t; i ++)
{
if (a[i][] >= a[start][]) //计算最多节目
{
//cout<<a[i][0]<<" "<<a[i][1]<<endl;
start = i;
s++;
}
}
cout<<s<<endl;
}
return ;
}