题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2037
题目描述:
在一天的时间里,尽可能的看最多的完整节目
输入数据包含多个测试实例,每个测试实例的第一行只有一个整数n(n<=100),表示你喜欢看的节目的总数,然后是n行数据,每行包括两个数据Ti_s,Ti_e (1<=i<=n),分别表示第i
个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。n=0表示输入结束,不做处理。
解题思路:
这是一个很典型的贪心问题,不管节目有多少,持续时间多长,第一次看的节目一定是最早结束的,然后再在剩余的节目里选出满足(开始时间>第一次选取的节目结束时间)
这个条件里最早结束的节目,以此类推。
#include <stdio.h>int main(){int i,j,k,n,a[101],b[101],l,m[101],p,o,t,d;while(scanf("%d",&n)!=EOF&&n!=0){for(i=0;i<n;i++){scanf("%d%d",&a[i],&b[i]);}for (i=1; i<n; i++){for (j=0; j<n-i; j++){if (b[j]>b[j+1]){ k=a[j];l=b[j];a[j]=a[j+1];b[j]=b[j+1];a[j+1]=k;b[j+1]=l;}}}int A[101]={0};for(i=0;i<n;i++){d=i-1;int p=0;while(d>=0){if(a[i]>=b[d]){if(p<A[d])p=A[d];}d--;}A[i]=p+1; } int t=A[0];for(i=0;i<n;i++)if(t<A[i])t=A[i];printf("%d\n",t);}return 0;}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦