继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

贪心——今年暑假不AC(hdu2037)

九日王朝
关注TA
已关注
手记 180
粉丝 41
获赞 185

题目链接:

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;}

 


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP