HBU训练营【动态规划DP】——兔子跳楼梯 (20分)

小兔子喜欢蹦蹦跳跳上楼梯 ,它能一次跳1阶楼梯,也能一次跳上2阶楼梯。问小兔子要上一个n阶的楼梯,最多有多少种不同上楼的走法?

输入格式:
输入一行包含一个整数 n,表示有几阶楼梯。

输出格式:
上楼梯的走法数

输入样例:

3

输出样例:

3

这道题一眼看去很熟悉,应该是当初慧河考试的时候出过得一道编程题,,刚做了斐波那契不久,看到这道题就有了思路,网上说动态规划和分治有些类似,可能我一直都把它当分治看吧,这些算法思想我还没有系统的看过,做过题,所以可能即便用了这些思想,也说不出名字。
把每一个问题分解成更小的子问题去求解,通过子问题,去求解当前问题,省去不必要的步骤,和斐波那契一样,因为怕超时和段错误,所以就用了迭代的方式。
#include <iostream>
#include <algorithm>
using namespace std;

int kind(int n){
	if(n==1)
		return 1;
	if(n==2)
		return 2;
	else{
		int t1 = 1;
		int t2 = 2;
		int t3;
		for(int i = 3;i<=n;i++){
			t3 = t1 + t2;
			t1 = t2;
			t2 = t3;
		}
		return t3;
	}
}

int main(){	
	ios::sync_with_stdio(false);
	int n;
	cin >> n;
	cout << kind(n);
	return 0;
}
方式二:代码更简洁
#include<iostream>
using namespace std;

int main(){
	int n;
	int a[10010]={0};
	int i;
    cin >> n;
    a[0] = a[1] = 1;
    for(i = 2;i<=n;i++)
        a[i] = a[i-1] + a[i-2];
    cout << a[n];
}

猜你喜欢

转载自blog.csdn.net/weixin_45845039/article/details/107874266
今日推荐