|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 bangbang-ande 于 2020-7-29 17:47 编辑
题目是这样子的:
题目描述
楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。
编一个程序,计算共有多少种不同的走法。
输入格式
一个数字,楼梯数。
输出格式
输出走的方式总数。
输入输出样例
输入 #1
4
输出 #1
5
说明/提示
对于 60\%60% 的数据,N≤50;
对于 100\%100% 的数据,N≤5000。
然后写的代码是这样的:
- #include <stdio.h>
- int ans = 0;
- int f(int n){
- if(n == 1){
- ans += 1;
- return 0;
- }
- if(n == 2){
- ans += 2;
- return 0;
- }
- f(n - 1);
- f(n - 2);
- }
- int main(){
- int n;
- scanf("%d", &n);
- f(n);
- printf("%d", ans);
- }
复制代码
可是运行起来是四个通过,剩下的超了时间(时间复杂度1s, 空间复杂度125mb)
然后又改了一下:
- #include <stdio.h>
- int ans = 0;
- int f(int n){
- if(n == 1 && n == 2){
- ans += 1;
- return 0;
- }
- f(n - 1);
- f(n - 2);
- }
- int main(){
- int n;
- scanf("%d", &n);
- f(n - 1);
- printf("%d", ans);
- }
复制代码
结果空间复杂度又出问题。。。
请问还有没有更好的方法?
可以来下边那个网站测试
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
题目网站:https://www.luogu.com.cn/problem/P1255
从我的力扣代码改的,这5000这种数据太大了,还得写个字符串表示大整数的加法,用动态规划从底层遍历到顶层结果就出来了
|
|