最も単純な動的計画法-カエルのジャンプの問題とカエルのジャンプの問題

1.
青蛙跳台阶问题:
有一个台阶有N阶,青蛙可以一次跳一阶,也可以一次跳两阶,那么跳到第N阶
总共有多少种跳法?

ここに画像の説明を挿入

假设跳到第N阶的跳法为f(N)
那么可由规律得到:
f(N) = f(N - 1) + f(N - 2);f(1)=1
f(2)=2

这与求斐波那契数列相似,这样可以套用求斐波那契数的代码
而要注意的是青蛙跳台阶问题里,f(1)=1,f(2)=2;
要将部分数值改变,才可套用此代码

long long Fibnacci(size_t N)
{
    
    
	if (N < 2)
	{
    
    
		return N;
	}
	int fib0 = 0, fib1 = 1, fib2;
	while (N>=2)
	{
    
    
		fib2 = fib0 + fib1;
		fib0 = fib1;
		fib1 = fib2;
		N--;
	}

	return fib2;
}

int main()
{
    
    
	printf("请输入一个数:");
	int n = 0;
	scanf("%d", &n);
	int k=Fibnacci(n);
	printf("%d", k);
	return 0;
}


2.
变形:
青蛙变态跳台阶问题:
青蛙一次可以跳1阶,也可以跳2阶……  也可以跳N阶,那么
跳到第N阶总共有多少种跳法?

假设跳到第N阶的跳法为f(n)

f(n) = f(n - 1) + f(n - 2) + f(n - 3) + ... + f(2) + f(1)
f(n - 1) = (n - 2) + f(n - 3) + ... + f(2) + f(1)

//两式错位相减得:
f(n) - f(n - 1) = f(n - 1);
f(n) = 2 * f(n - 1);

f(n)=2^(n-1)

おすすめ

転載: blog.csdn.net/cfk17829572643/article/details/113788938