当前位置: 首页 > news >正文

糊涂人寄信——递推

思路分析:当有n封信,n个信封时。第k封信没有装在第k个信封里(k从1~n),就算所有的信封都装错了。我们可以得知的是,当有1封信,时,装错类别数为0。当有两封信时,装错类别为1。

当有三封信时,我们可以先拆解问题,假设第一封信装错了位置(有两种可能),那么就还剩下2封信要装错位置,而两封信要装错的类别我们也已经求解得知了,所以这里3封信要装错位置的类别数就为 第一封信装错位置的可选择数+剩下的信的装错总类别。也就是2*1=1。

要装错一共分为两个大类。(0<x<n,0<y<n)

1:当第x封信装进了第y个信封时(y有n-1个选择),第y封信也恰好装进了第x个信封。此时还有n-2封信需要装错。(n-1)*x[n-2]

2:当第x封信装进了第y个信封时(y有n-1个选择),第y封信没有恰好装进了第x个信封。此时还有n-1封信需要装错。(n-1)*x[n-1]

总加起来就是 sum=(n-1)*x[n-2]+(n-1)*x[n-1];

代码实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <string> 
#include <stack> 
#define MAX 100
using namespace std;
long long int n, arr[MAX];/*数组用来存数字*/

long long int f(int x)
{
   if(x==1) return 0 ;
   if (x == 2) return 1;
   else return (x - 1) * f(x - 1) + (x - 1) * f(x - 2);
}
int main()
{
    cin >> n;
    f(n);
    cout << f(n) << endl;
    return 0;
}

http://www.dtcms.com/a/81366.html

相关文章:

  • 算法设计与分析——动态规划
  • KnowGPT知识图谱整合
  • 深入浅出理解LLM PPO:基于verl框架的实现解析之一
  • Java并发编程面试题:锁(17题)
  • c++ 数组索引越界检查
  • 解决 C 盘空间不足,免费软件高效清理
  • Python 用户账户(创建用户账户)
  • GaussDB构建高性能Schema:分布式数据库架构设计与实战
  • python NameError报错之导库报错
  • C++代码2-多目标算法求解车辆路径规划
  • 阻止 Mac 在运行任务时进入休眠状态
  • Linux python 安装 conda(内部自带的有python的版本了)
  • 通俗详解redis底层数据结构哈希表之渐进式rehash
  • Windows10配置OpenJDK11
  • VSCode下载安装指南
  • 零、ubuntu20.04 安装 anaconda
  • 建模中的特征衍生技巧总结(含各类常用衍生函数)
  • kali,NTFS,用户管理,文件共享,本地安全策略,计算机基础
  • OpenCV 其他模块使用指南
  • C++20 中 `constexpr` 的强大扩展:算法、工具与复数库的变革
  • dart学习记录5(类、对象)
  • 练习-班级活动(map存储键值对)
  • hexo+butterfly博客功能完善和美化(三)---评论功能载入
  • Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多变量回归预测
  • 爱普生晶振FC2012AA汽车ADAS主控制系统的理想选择
  • 代码随想录刷题day50|(回溯算法篇)131.分割回文串▲
  • zephyr-中国跨国并购数据(1997-2024.3.8)
  • C# System.Text.Encoding 使用详解
  • 支持向量机(SVM):从入门到精通的机器学习利器
  • 多模态大模型常见问题