HDU 2044 一只小蜜蜂(基础DP)

HDU 2044 一只小蜜蜂(基础DP)

题目链接

HDU2044

题意

有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。
其中,蜂房的结构如下所示。
在这里插入图片描述

解析

这个和爬楼梯是同一个东西,由于只能向右,所以实际上,输出值只取决于b-a的差值。
HDU 2044 一只小蜜蜂(基础DP)_第1张图片总的来讲,就是对于某个格子n(n>=2)来说,他的来源可能是n-1层,也可能是n-2层。
所以到达这一格子的方案数,会是f(n-1)+f(n-2),即n-1层与n-2层的方案数总和。其中f(0)为a所在位置,即最开始处。
于是我们初始化:
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] = 1;
	ans[2] = 2;
	ans[3] = 3;
	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--)
	{
		int a, b;
		scanf("%d%d", &a, &b);
		n = b-a;
		printf("%lld\n", solve());
	}
	return 0;
}

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