帮忙看下贪心算法的题目,为何wa了,测试结果好像挺对的

Hugh_OverAc 2014-12-18 12:51:34
Description
有n项工作,每项工作分别在Si时间开始,在Ti时间结束。对于每项工作,你都可以选择参加与否。如果选择了参加,那么自始至终都必须全程参与。此外,参与工作的时间段不能重叠(即使是开始的瞬间和结束的瞬间的重叠也不允许)。
你的目的是参与尽可能多的工作,那么最多能参与多少项工作呢?
Input
输入有多组,每组先输入一个n,代表有多少项任务。接下来n行每行输入两个整数,代表第i项任务的起始时间和终止时间。

Output
输出最多能参与的工作数。

Sample Input
5
1 3
2 5
4 7
6 9
8 10
3
1 10
3 5
6 9
Sample Output
3
2
#include <stdio.h>
#include <stdlib.h>

void sort_change(int begin_time[],int end_time[],int n)
{
int i,j;
int temp1,temp2;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(end_time[i]>end_time[j])
{
temp1=end_time[j];
end_time[j]=end_time[i];
end_time[i]=temp1;
temp2=begin_time[j];
begin_time[j]=begin_time[i];
begin_time[i]=temp2;
}
}
}
}

int Fuc(int begin_time[],int end_time[],int n)
{
int idx=1;
int i=0,j;
for(j=1;j<n;j++){
if(end_time[i]<begin_time[j]){
idx++;
i=j;
}
}
return idx;
}

int main(void)
{
int n,i;
int Mycount;
int begin_time[10001]={0},end_time[10001]={0};
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++){
scanf("%d%d",&begin_time[i],&end_time[i]);
}
sort_change(begin_time,end_time,n);
Mycount=Fuc(begin_time,end_time,n);
printf("%d\n",Mycount);
}
return 0;
}
...全文
385 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
panasonic0804 2014-12-19
  • 打赏
  • 举报
回复
引用 3 楼 whm546877424 的回复:
为何呢??
不太明白你的意思。不就是让你解决问题么?而且也只是个人建议,你可以不用采纳。
Hugh_OverAc 2014-12-18
  • 打赏
  • 举报
回复
引用 2 楼 panasonic0804 的回复:
个人觉得你应该定义一个struct,该结构中可包含一个link来记录以该点为起点,有效项任务(或者是总数)。然后,你只需要访问这个link或者是总数就可以了吧。
为何呢??
panasonic0804 2014-12-18
  • 打赏
  • 举报
回复
个人觉得你应该定义一个struct,该结构中可包含一个link来记录以该点为起点,有效项任务(或者是总数)。然后,你只需要访问这个link或者是总数就可以了吧。
赵4老师 2014-12-18
  • 打赏
  • 举报
回复
通向金牌之路 《全国青少年信息学竞赛培训教材——复赛》陈合力 游光辉 编著 浙江大学出版社 定价:39.00元(含光盘)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧