hdu 2037 今年暑假不AC 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2037 .
贪心水题
题目大意:输入N个节目的起止时间,输出一天内能完整看到的最大节目总数.
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node //定义show结构体,a为开始时间,b为结束时间
{
int a,b;
}show[209];
int cmp(node a,node b)
{
return a.b<b.b?1:0;
}
int chuli(int m,int flag,int n)//flag代表这是第几个能看完的节目
{
int p=m+1;
if(p==n)return flag;
while(show[m].b>show[p].a)
{
if(p==n)return flag;
p++;
if(p==n)return flag;
}
if(p==n)return flag;
m=p;
return chuli(m,++flag,n);
}
int main()
{
int n;
while(1)
{
scanf("%d",&n);
if(n==0)break;
for(int i=0;i<n;i++)
{
scanf("%d%d",&show[i].a,&show[i].b);
}
sort(show,show+n,cmp);
printf("%d\n",chuli(0,1,n));
//for(int i=0;i<n;i++)
//printf("###$$$%3d\t%d $$$%%%\n",show[i].a,show[i].b);
}
return 0;
}
PS:为什么处理函数中有那么多"if(p==n)return flag;"这一句呢?因为交的时候总是
runtime error (运行时错误)即程序运行到一半就崩溃了.
比如说:
①除以零
②数组越界:int a[3]; a[10000000]=10;
③指针越界:int * p; p=(int *)malloc(5 * sizeof(int)); *(p+1000000)=10;
④使用已经释放的空间:int * p; p=(int *)malloc(5 * sizeof(int));free(p); *p=10;
⑤数组开得太大,超出了栈的范围,造成栈溢出:int a[100000000];