关于动态规划的学习之一(斐波那契数列)

斐波那契数列

斐波那契数列是非常经典的数列。它指形如1,1,2,3,5,8,13,21,34,55这种数列。这种数列的特点是从第三数(包括第三个数)开始,之后的每一个数大小都是它前两个数的和。斐波那契问题算是动态规划的入门级题目。

斐波那契数列

题目大意:数列1,1,2,3,5,8,13是一个斐波那契数列,问这个数列中第n(n<=30)个数是什么.
解题思路:斐波那契数列中第i个数的大小为f[i]=f[i-1]+f[i-2],其中i>=3,所有只需要先写出第一个和第二个数的值,再按照这个式子将后面的数字一个个算出来就可以了,无论是循环还是递归都可以。
不过斐波那契数列的增长速度非常快,当n很大的时候需要用到高精度加法来计算第n个数。
参考代码:

#include<iostream>
using namespace std;
int main()
{
	long long int n,a[35]={1,1};
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	cout<<a[n];
	return 0;
}

爬楼梯

题目大意:一个楼梯共有n阶(n<=30),每一次上楼梯只能上一阶或两阶,问一共有多少种上去的方法
解题思路:我们设f[i]为登上第i阶的所有方法,一开始我们处于地面,属于第0阶,而第0阶不需要走,所以f[0]=1,而登上第一层台阶只有一种方法,就是从第0阶往上走一阶。其中f[i]是由f[i-1]登上一阶或者f[i-2]登上两阶得到的,我们可以得到关于f[i]的公式:f[i]=f[i-1]+f[i-2],登上第i阶的方法是i-1阶与i-2阶的方法之和。所以这也是一种斐波那契数列。 代码其实和上方是一样的。
代码:

#include<iostream>
using namespace std;
int main()
{
	long long int n,a[35]={1,1};
	cin>>n;
	for(int i=2;i<=n;i++)
	{
		a[i]=a[i-1]+a[i-2];
	}
	cout<<a[n];
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值