标题:[求助]一道递归的acm试题,怎么超时了?
只看楼主
guhongfeixue
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-18
 问题点数:0 回复次数:5 
[求助]一道递归的acm试题,怎么超时了?

一道acm试题
Time Limit:1000MS
Memory Limit:30000KB

Description

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Input

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。
n=0表示输入数据的结束,不做处理。

Output

对于每个测试实例,输出在第n年的时候母牛的数量。
每个输出占一行。

Sample Input

2
4
5
0

Sample Output

2
4
6
下面是我的算法,竟然超时了。清高手指点
#include<stdio.h>
int cowstory(int n)
{
if(n<5) return n;
return (cowstory(n-1)+cowstory(n-3));
}
void main()
{
int n;
scanf("%d",&n);
while(n!=0)
{
printf("%d\n",cowstory(n));
scanf("%d",&n);
}

}

搜索更多相关主题的帖子: acm试题 递归 母牛 超时 
2007-10-27 23:39
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1026
专家分:177
注 册:2007-5-10
得分:0 
显然要超时,O(n)的预处理O(1)的查询,你硬是写成了O(2^n)不超时才怪
2007-10-28 01:35
guhongfeixue
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2007-10-18
得分:0 
怎么改呢?
2007-10-28 10:37
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

递推回去就可以过.


倚天照海花无数,流水高山心自知。
2007-10-28 11:29
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
得分:0 

去年的牛+四年前的小牛数(就是今年生的小牛数)
F(n)=F(n-1)+F(n-3);//n>3
F(n)=n; //n<=3

然后直接换成数组,再优化一下,每次只保存两个加数.


倚天照海花无数,流水高山心自知。
2007-10-28 11:41
zxc1998
Rank: 1
等 级:新手上路
威 望:1
帖 子:133
专家分:0
注 册:2007-3-21
得分:0 
高高高,佩服,
2007-10-30 20:59



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-181312-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.756616 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved