C#,聚会数(相遇数,Rencontres Number)的算法与源代码

news2024/9/21 14:44:39

1 相遇数

相遇数(Rencontres Number,partial derangement numbers)是指部分扰动的数量,或与独立对象的r相遇的置换数(即具有固定点的独立对象的置换数)。

看不通。懂的朋友给解释一下哈。

2 源程序

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        private static int Rencontres_Number_Binomial_Coeff(int n, int k)
        {
            if (k == 0 || k == n)
            {
                return 1;
            }
            return Rencontres_Number_Binomial_Coeff(n - 1, k - 1) + Rencontres_Number_Binomial_Coeff(n - 1, k);
        }
        
        public static int Rencontres_Number(int n, int m)
        {
            if (n == 0 && m == 0)
            {
                return 1;
            }
            if (n == 1 && m == 0)
            {
                return 0;
            }
            if (m == 0)
            {
                return (n - 1) * (Rencontres_Number(n - 1, 0) + Rencontres_Number(n - 2, 0));
            }
            return Rencontres_Number_Binomial_Coeff(n, m) * Rencontres_Number(n - m, 0);
        }

        private static int[,] Rencontres_Number_Binomial_Coeff_Second(int n, int k)
        {
            int[,] Coeff = new int[MAX, MAX];
            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= Math.Min(i, k); j++)
                {
                    if (j == 0 || j == i)
                    {
                        Coeff[i, j] = 1;
                    }
                    else
                    {
                        Coeff[i, j] = Coeff[i - 1, j - 1] + Coeff[i - 1, j];
                    }
                }
            }
            return Coeff;
        }

        public static int Rencontres_Number_Second(int n, int m)
        {
            int[,] Coeff = Rencontres_Number_Binomial_Coeff_Second(n, m);
            int[,] dp = new int[n + 1, m + 1];
            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= m; j++)
                {
                    if (j <= i)
                    {
                        if (i == 0 && j == 0)
                        {
                            dp[i, j] = 1;
                        }
                        else if (i == 1 && j == 0)
                        {
                            dp[i, j] = 0;
                        }
                        else if (j == 0)
                        {
                            dp[i, j] = (i - 1) * (dp[i - 1, 0] + dp[i - 2, 0]);
                        }
                        else
                        {
                            dp[i, j] = Coeff[i, j] * dp[i - j, 0];
                        }
                    }
                }
            }
            return dp[n, m];
        }
    }
}
 

——————————————————————————

POWER BY TRUFFER.CN 50018.COM

3 代码格式

using System;

namespace Legalsoft.Truffer.Algorithm
{
    public static partial class Number_Sequence
    {
        private static int Rencontres_Number_Binomial_Coeff(int n, int k)
        {
            if (k == 0 || k == n)
            {
                return 1;
            }
            return Rencontres_Number_Binomial_Coeff(n - 1, k - 1) + Rencontres_Number_Binomial_Coeff(n - 1, k);
        }
        
        public static int Rencontres_Number(int n, int m)
        {
            if (n == 0 && m == 0)
            {
                return 1;
            }
            if (n == 1 && m == 0)
            {
                return 0;
            }
            if (m == 0)
            {
                return (n - 1) * (Rencontres_Number(n - 1, 0) + Rencontres_Number(n - 2, 0));
            }
            return Rencontres_Number_Binomial_Coeff(n, m) * Rencontres_Number(n - m, 0);
        }

        private static int[,] Rencontres_Number_Binomial_Coeff_Second(int n, int k)
        {
            int[,] Coeff = new int[MAX, MAX];
            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= Math.Min(i, k); j++)
                {
                    if (j == 0 || j == i)
                    {
                        Coeff[i, j] = 1;
                    }
                    else
                    {
                        Coeff[i, j] = Coeff[i - 1, j - 1] + Coeff[i - 1, j];
                    }
                }
            }
            return Coeff;
        }

        public static int Rencontres_Number_Second(int n, int m)
        {
            int[,] Coeff = Rencontres_Number_Binomial_Coeff_Second(n, m);
            int[,] dp = new int[n + 1, m + 1];
            for (int i = 0; i <= n; i++)
            {
                for (int j = 0; j <= m; j++)
                {
                    if (j <= i)
                    {
                        if (i == 0 && j == 0)
                        {
                            dp[i, j] = 1;
                        }
                        else if (i == 1 && j == 0)
                        {
                            dp[i, j] = 0;
                        }
                        else if (j == 0)
                        {
                            dp[i, j] = (i - 1) * (dp[i - 1, 0] + dp[i - 2, 0]);
                        }
                        else
                        {
                            dp[i, j] = Coeff[i, j] * dp[i - j, 0];
                        }
                    }
                }
            }
            return dp[n, m];
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1441307.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

极值图论基础

目录 一&#xff0c;普通子图禁图 二&#xff0c;Turan问题 三&#xff0c;Turan定理、Turan图 1&#xff0c;Turan定理 2&#xff0c;Turan图 四&#xff0c;以完全二部图为禁图的Turan问题 1&#xff0c;最大边数的上界 2&#xff0c;最大边数的下界 五&#xff0c;…

按键扫描16Hz-单片机通用模板

按键扫描16Hz-单片机通用模板 一、按键扫描的原理1、直接检测高低电平类型2、矩阵扫描类型3、ADC检测类型二、key.c的实现1、void keyScan(void) 按键扫描函数①void FHiKey(void) 按键按下功能②void FSameKey(void) 按键长按功能③void FLowKey(void) 按键释放功能三、key.h的…

PlantUML绘制UML图教程

UML&#xff08;Unified Modeling Language&#xff09;是一种通用的建模语言&#xff0c;广泛用于软件开发中对系统进行可视化建模。PlantUML是一款强大的工具&#xff0c;通过简单的文本描述&#xff0c;能够生成UML图&#xff0c;包括类图、时序图、用例图等。PlantUML是一款…

FPGA_简单工程_无源蜂鸣器驱动实验

一 理论 蜂鸣器按其结构可分为电磁式蜂鸣器和压电式蜂鸣器2中类型&#xff0c;按其有无信号源&#xff0c;分为有源蜂鸣器和无源蜂鸣器。 有源蜂鸣器&#xff0c;内部装有集成电路&#xff0c;不需要音频驱动电路&#xff0c;就直接能发出声响&#xff0c;而无源蜂鸣器&#…

8个简约精美的WordPress外贸网站主题模板

Simplify WordPress外贸网站模板 Simplify WordPress外贸网站模板&#xff0c;简洁实用的外贸公司wordpress外贸建站模板。 查看演示 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板&#xff0c;做进出口贸易公司官网的wordpress网站模板。 查看演…

网友:感谢华为救了我的下半生。

(关注数据结构和算法&#xff0c;了解更多新知识) 最近一位网友发视频称&#xff0c;华为Mate60 Pro帮他挡了子弹。视频配文&#xff1a;“一场意外&#xff0c;没有这个手机隔挡&#xff0c;下半生我可能就在轮椅上度过了&#xff01;”视频中&#xff0c;手机摄像头右侧被击中…

TS学习与实践

文章目录 学习资料TypeScript 介绍TypeScript 是什么&#xff1f;TypeScript 增加了什么&#xff1f;TypeScript 开发环境搭建 基本类型编译选项类声明属性属性修饰符getter 与 setter方法static 静态方法实例方法 构造函数继承 与 super抽象类接口interface 定义接口implement…

git flow与分支管理

git flow与分支管理 一、git flow是什么二、分支管理1、主分支Master2、开发分支Develop3、临时性分支功能分支预发布分支修补bug分支 三、分支管理最佳实践1、分支名义规划2、环境与分支3、分支图 四、git flow缺点 一、git flow是什么 Git 作为一个源码管理系统&#xff0c;…

SQL--事务

事务简介 事务 是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事务会把所有的操作作为一个整体一起向系 统提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败。 就比如: 张三给李四转账1000块钱&#xff0c;张三银行账户…

适用于 Windows 的 6 款 iPhone 数据恢复软件

数据恢复 已经取得了长足的进步。从仅提供恢复数据的可能性到保证数据恢复&#xff0c;有许多适用于 Windows的第三方 iPhone 数据恢复软件。 大多数软件都是高级工具&#xff0c;但是提供了出色的数据恢复解决方案。从iPhone恢复数据非常简单。 只需将 iPhone 连接到您的计算…

蓝桥杯刷题day08——完全日期

1、题目描述 如果一个日期中年月日的各位数字之和是完全平方数&#xff0c;则称为一个完全日期。 例如&#xff1a;2021年6月5日的各位数字之和为20216516&#xff0c;而16是一个完全平方数&#xff0c;它是4的平方。所以2021年6月5日是一个完全日期。 请问&#xff0c;从200…

计算机毕业设计Python+django医院后勤服务系统flask

结合目前流行的 B/S架构&#xff0c;将医疗后勤服务管理的各个方面都集中到数据库中&#xff0c;以便于用户的需要。该平台在确保平台稳定的前提下&#xff0c;能够实现多功能模块的设计和应用。该平台由管理员功能模块,工作人员模块&#xff0c;患者模块&#xff0c;患者家属模…

git 使用 (备查)

git忽略清单 添加忽略清单 SSH免登录 ssh协议可以实现免登录操作&#xff0c;身份验证通过密钥实现。 跨团队写作 解决冲突 拉取 克隆 拉取最新版本 推送 远程仓库别名 直接使用git push推送 多人协作开发 分支命令 合并分支命令在主分支使用&#xff0c;将develop分支合并到…

【多模态】27、Vary | 通过扩充图像词汇来提升多模态模型在细粒度感知任务(OCR等)上的效果

文章目录 一、背景二、方法2.1 生成 new vision vocabulary2.1.1 new vocabulary network2.1.2 Data engine in the generating phrase2.1.3 输入的格式 2.2 扩大 vision vocabulary2.2.1 Vary-base 的结构2.2.2 Data engine2.2.3 对话格式 三、效果3.1 数据集3.2 图像细粒度感…

Git详细讲解

文章目录 一、Git相关概念二、本地分支中文件的添加 、提交2.1 文件状态2.2 创建Git仓库2.2.1 git init2.2.2 git clone 2.3 添加操作(git add)2.4 提交操作&#xff08;git commit&#xff09;2.5 撤销操作2.5.1 撤销 add操作2.5.2 撤销 commit操作2.5.3 覆盖上一次的commit操…

单片机的省电模式及策略

目录 一、单片机省电的核心策略 二、单片机IO口的几种模式 三、单片机的掉电运行模式 &#xff08;1&#xff09; 浅谈cpu运行为什么会需要时钟&#xff1f; &#xff08;2&#xff09;STC15系列单片机内部可以配置时钟 &#xff08;3&#xff09;分频策略&#xff0c;降低…

伪造身份请求怎么办?看这篇就够了

您好&#xff0c; 如果喜欢我的文章或者想上岸大厂&#xff0c;可以关注公众号「量子前端」&#xff0c;将不定期关注推送前端好文、分享就业资料秘籍&#xff0c;也希望有机会一对一帮助你实现梦想 JWT身份鉴权方案&#xff0c;token会作为主要的鉴权方式来作为前后端通信校验…

Linux下的crontab定时执行任务命令详解

在LINUX中&#xff0c;周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件&#xff0c;这些配置文件中包含了命令行及其调用时间。 cron的配置文件称为“crontab”&#xff0c;是“cron table”的简写。 一、cron服务   cron是一个…

[职场] 进入大数据领域需要掌握哪些软件 #其他#职场发展#职场发展

进入大数据领域需要掌握哪些软件 学习大数据首先我们要学习Java语言和Linux操作系统&#xff0c;这两个是学习大数据的基础&#xff0c;学习的顺序不分前后。 Java 大家都知道Java的方向有JavaSE、JavaEE、JavaME&#xff0c;学习大数据要学习那个方向呢? 只需要学习Java的…

Oracle 面试题 | 19.精选Oracle高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…