好的,今天继续AC了一道比较简单的贪心题目。
题目链接: 题目
题目的思路大致如下:
要使得看尽量多的完整的比赛,必须要使节目结束时间尽量早,且要使得下一个节目的开始时间比上一个节目的开始时间要晚。
- 先将输入的节目单对其结束时间进行由小到大的排序。
- 再从排好的节目单由第一个逐步寻找下一个节目开始时间比前一个节目时间晚的节目。并每次更新最后节目的结束时间。在节目单中,从头找到尾。
- 每次找到新节目将节目计数器不断递增。
- 输出可完整观看的节目总数。
代码如下:
#include <iostream>
using namespace std;
int main()
{
int t,count1,s,u,k;
int a[101];
int b[101];
while(cin>>t && t)
{
count1=1;
for(int i=0;i<t;i++)
{
cin>>a[i]>>b[i];
}
for(int i=0; i< (t-1);i++)
{
for(int j=0;j< (t-1-i);j++)
{
if(b[j]>b[j+1])
{
k=b[j+1];
b[j+1]=b[j];
b[j]=k;
k=a[j+1];
a[j+1]=a[j];
a[j]=k;
}
}
}
s=a[0];
u=b[0];
for(int i=0; i<t;i++)
{
if(a[i] >= u)
{
count1++;
u=b[i];
}
}
cout<<count1<<endl;
}
return 0;
}