HDU2041 超级楼梯(基础DP)

HDU2041 超级楼梯(基础DP)

题目链接

HDU2041

题意

有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

解析

总的来讲就跟那个计蒜客爬楼梯一样,还是斐波那契数列的递推。
HDU2041 超级楼梯(基础DP)_第1张图片
总的来讲,就是对于某一层楼梯n(n>=2)来说,他的来源可能是n-1层,也可能是n-2层。
所以到达这一楼层的方案数,会是f(n-1)+f(n-2),即n-1层与n-2层的方案数总和。
于是我们初始化:
f(0) = 0;
f(1) = 1;
开始递推即可

代码

#include
#define ll long long
using namespace std;
const int MAXN = 500;
ll ans[MAXN];
int n;
ll solve()
{
	ans[1] = 0;
	ans[2] = 1;
	ans[3] = 2;
	for (int i = 4; i <= n; i++)
	{
		ans[i] = ans[i-1]+ans[i-2];
	}
	return ans[n];
}
int main()
{
	int T;
	scanf("%d", &T);
	while (T--)
	{
		scanf("%d", &n);
		printf("%lld\n", solve());
	}
	return 0;
}

你可能感兴趣的:(#,动态规划DP,基础dp,题解)