【Ybt OJ】[基础算法 第1章]递推算法

本文详细介绍了递推算法的基础知识,通过五个经典例题,包括错排问题、奇怪汉诺塔、数的划分、传球游戏和平铺方案,深入剖析了递推式的建立和解题思路。每个例题都提供了详细的分析和代码实现,帮助读者理解和掌握递推算法的应用。
摘要由CSDN通过智能技术生成

「 「 基础算法 」 」 第1章 递推算法
目录:

A.错排问题
B.奇怪汉诺塔
C.数的划分
D.传球游戏
E.平铺方案

A . A. A. 例题 1 1 1 错排问题

洛谷 l i n k link link
在这里插入图片描述

分析:

考虑第 n n n个元素 放在 k k k位上 那么有 ( n − 1 ) (n-1) (n1)种方案 ( k ≠ n ) (k≠n) (k=n)
再考虑这个 k k k 当它在 n n n位时 就有由于 n , k n,k n,k两元素位置相同 其他 n − 2 n-2 n2个元素错排即可
k k k不在 n n n位时 直接 n − 1 n-1 n1个元素错排
递推式 f n = ( n − 1 ) ∗ ( f n − 1 + f n − 2 ) f_n=(n-1)*(f_{n-1}+f_{n-2}) fn=(n1)(fn1+fn2)

CODE:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n;
long long f[25];
int main(){
   
	scanf("%d",&n);
	f[1]=0;f[2]=1;
	for(int i=3;i<=n;i++)
		f[i]=(i-1)*(f[i-1]+f[i-2]);  //递推
	printf("%lld",f[n]);
	return 0;
}

B . B. B. 例题 2 2 2 奇怪汉诺塔

在这里插入图片描述

分析:

看到这个 n n n这么小 直接打表
考虑只有 3 3 3座塔的汉诺塔问题 f n f_n fn n n n盘子 3 3 3塔的最优步数
先把 n − 1 n-1 n1个盘子移到 B B B塔 则步数为 f n − 1 f_{n-1} f

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值