排列组合算法(升级版)

news2024/10/4 20:02:19

前言
在上一期博客中我们分享了一般的排列组合算法(没看的话点这里哦~),但是缺点很明显,没法进行取模运算,而且计算的范围十分有限,而今天分享的排列组合升级版算法能够轻松解决这些问题,话不多说,让我们开始今天的学习吧!
在这里插入图片描述

代码实现
首先我们需要知道这这些公式
C(n,k) = C(n-1,k) + C(n-1,k-1) (C(n,k)指从n个元素中选择k个元素的方式数)
A(n,k) = (n-k)! * c(n,k)
知道了这个公式我们就可以设置数组C[I][J]表示C(I,J),数组A[I][J]表示A(i,j),数组f[i]表示i!,递推公式求得排列组合的值,初始化时,当j为0时,c[i][j]赋值为1,表示从i个元素中选择0个元素只有一种方式;否则,c[i][j] = c[i-1][j] + c[i-1][j-1]表示根据递推关系式计算组合数。其次,通过循环计算阶乘。阶乘f(n)表示从1到n的连续整数的乘积,即n!。最后通过组合数和阶乘的结果来计算排列数。
代码如下:

#include<stdio.h>
#define mod 1000000007//模数
int C[1145][1145];//组合
long long F[1145];//结成
int A[1145][1145];//排列
void combination(int n)
{
    for (int i = 0; i < n; i++)//当j = 0时直接初始化为1
    {
        C[i][0] = 1;
    }
    for (int i = 1; i < n; i++)//递推公式求组合数
    {
        for (int j = 1; j <= i; j++)
        {
            C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mod;
        }
    }
}
void factorial(int n)
{
    F[0] = 1;
    for (int i = 1; i < n; i++)//求结成
    {
        F[i] = F[i - 1] * i % mod;
    }
}
void permutation(int n)
{
    for (int i = 0; i < n; i++)//递推公式求排列数
    {
        for (int j = 0; j <= i; j++)
        {
            A[i][j] = F[i - j] * C[i][j] % mod;
        }
    }
}
int main()
{
int n = 1145;
    combination(n);
    factorial(n);
    permutation(n);
    return 0;
}

这就是升级版的排列组合算法,以后在遇见这中类型题想必小伙伴们能够信手捏来,如果觉得博主讲得不错的话,千万不要忘记给博主一个关注,点赞,收藏鼓励一下哦~,我们下期再见!

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

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

相关文章

Bean 生命周期 和 SpringMVC 执行过程

这里简单记录下 Bean 生命周期的过程&#xff0c;方便自己日后面试用。源码部分还没看懂&#xff0c;这里先贴上结论 源码 结论

PAT 乙级 1028 人口普查

解题思路&#xff1a;此题我想到俩种方法&#xff0c;一种是排序方法&#xff0c;一种是不排序的方法&#xff0c;首先都是看是否是有效年龄&#xff0c;然后一种是排序&#xff0c;另一种是维护最大值和最小值的变量&#xff0c;一定要注意如果有效数字是0那就只输出0就可以了…

【PostgreSQL内核学习(二十)—— 数据库中的遗传算法】

数据库中的遗传算法 概述个体的编码方式及种群初始化geqo 函数 适应值geqo_eval 函数gimme_tree 函数 父体选择策略geqo_selection 函数 杂交算子边重组杂交 ERX ( edge recombination crossover)gimme_edge_table 函数gimme_tour 函数 变异算子geqo_mutation 函数 声明&#x…

在Ubuntu20.04配置PX4环境

目录 1.下载PX4源码2.安装PX4所有工具链3.编译PX4工程1.下载PX4源码 打开Ubuntu,Ctrl+Alt+T打开终端输入下面代码: git clone https://github.com/PX4/PX4-Autopilot.git --recursive出现上图中出现“Command ‘git’ not found, but can be installed with”,使用以下代码…

企业私有云容器化架构运维实战

企业私有云容器化架构运维实战 了解 什么是虚拟化: 虚拟化&#xff08;Virtualization&#xff09;技术最早出现在 20 世纪 60 年代的 IBM 大型机系统&#xff0c;在70年代的 System 370 系列中逐渐流行起来&#xff0c;这些机器通过一种叫虚拟机监控器&#xff08;Virtual M…

【线性代数】通过矩阵乘法得到的线性方程组和原来的线性方程组同解吗?

一、通过矩阵乘法得到的线性方程组和原来的线性方程组同解吗&#xff1f; 如果你进行的矩阵乘法涉及一个线性方程组 Ax b&#xff0c;并且你乘以一个可逆矩阵 M&#xff0c;且产生新的方程组 M(Ax) Mb&#xff0c;那么这两个系统是等价的&#xff1b;它们具有相同的解集。这…

Selenium自动化教程02:浏览器options配置及常用的操作方法

1.配置Chrome浏览器的选项 # Author : 小红牛 # 微信公众号&#xff1a;WdPython options webdriver.ChromeOptions() # 创建配置对象 options.add_argument(langzh_CN.UTF-8) # 设置中文 options.add_argument(--headless) # 无头参数,浏览器隐藏在后台运行 options.add_…

Win10 华硕笔记本只有飞行模式 WIFI 消失(仅供参考)

一、问题描述 下班&#xff0c;将电脑设置为休眠模式&#xff0c;回家&#xff0c;然后就出现&#xff1a;只有飞行模式&#xff0c;WIFI 消失 虽然有线可以用&#xff0c;但是不爽啊&#xff01; 在“网络和Internet设置中” &#xff0c;只有“飞行模式”的开关 &#xff0c…

java球队信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java Web球队信息管理系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…

基于MATLAB的泊松分布,正态分布与伽玛分布(附完整代码与例题)

目录 一. 泊松分布 1.1 理论部分 1.2 MATLAB函数模型 1.3 例题 二. 正态分布 2.1 理论部分 2.2 MATLAB函数模型 2.3 例题 三. 伽玛分布 3.1 理论部分 3.2 MATLAB函数模型 3.3 例题 一. 泊松分布 1.1 理论部分 Poisson分布是离散的&#xff0c;其x值只能取自然数。…

uniapp Vue3 面包屑导航 带动态样式

上干货 <template><view class"bei"><view class"container"><view class"indicator"></view><!-- 遍历路由列表 --><view v-for"(item, index) in routes" :key"index" :class&quo…

卷积神经网络 反向传播

误差的计算 softmax 经过softmax处理后所有输出节点概率和为1 损失&#xff08;激活函数&#xff09; 多分类问题&#xff1a;输出只可能归于某一个类别&#xff0c;不可能同时归于多个类别。 误差的反向传播 求w的误差梯度 权值的更新 首先是更新输出层和隐藏层之间的权重…

RustDesk连接客户端提示key不匹配 Key Mismatch无法连接(已解决)

环境: RustDesk1.1.9 服务端docker部署 问题描述: RustDesk连接客户端提示key不匹配 Key Mismatch无法连接 解决方案: 1.docker部署RustDesk服务检查配置 networks:rustdesk-net:external: falsevolumes:hbbr:hbbs:services:hbbs:container_name: rustdesk-hbbsport…

webstrom 快速创建typescript 语法检测的Vue3项目

webstrom 快速创建typescript 语法检测的Vue3项目 若您想为您的Vue 3项目添加TypeScript支持&#xff0c;您需要进行以下步骤&#xff1a; 安装 typescript 和 vitejs/plugin-vue 作为开发依赖项&#xff1a; npm install --save-dev typescript vitejs/plugin-vue创建一个…

Cucumber-JVM的示例和运行解析

Cucumber-JVM 是一个支持 Behavior-Driven Development (BDD) 的 Java 框架。在 BDD 中&#xff0c;可以编写可读的描述来表达软件功能的行为&#xff0c;而这些描述也可以作为自动化测试。 Cucumber-JVM 的最小化环境 Cucumber-JVM是BDD的框架&#xff0c; 提供了GWT语法的相…

andriod安卓水果商城系统课设

​ 一、目的及任务要求 随着当今社会经济的快速发展和网络的迅速普及&#xff0c;手机基本成为了每个人都随身携带的电子产品。传统的购物方式已经满足不了现代人日益追求便利及高效率的购物心理&#xff0c;而通过移动手机上的在线购物系统&#xff0c;可以便捷地甚至足不出…

Vue 自定义ip地址输入组件

实现效果&#xff1a; 组件代码 <template><div class"ip-input flex flex-space-between flex-center-cz"><input type"text" v-model"value1" maxlength"3" ref"ip1" :placeholder"placeholder"…

Win10 + 4090显卡配置深度学习环境 + gaussian-splatting配置 + 实测自己的场景

目录 1 安装Anaconda 2023.09版本 2 安装CUDA11.8 3 安装深度学习库Cudnn8.6.0 4 安装VSCODE2019 5 安装Colmap3.8 6 安装git 7 安装Python3.10 Pytorch2.0.0 7 安装项目 8 采集数据 8.1 IPhone 14 pro 拍摄30张照片左右 做预处理 8.2 生成colmap位姿等信息 8.3 开…

starrocks集群fe/be节点进程守护脚本

自建starrocks集群&#xff0c;有时候服务会挂掉&#xff0c;无法自动拉起服务&#xff0c;于是采用supervisor进行进程守护。可能是版本的原因&#xff0c;supervisor程序总是异常&#xff0c;无法对fe//be进行守护。于是写了个简易脚本。 #!/bin/bash AppNameFecom.starrock…

Xshell连接ubuntu,从github克隆项目,用Xshell克隆项目

访问不了github&#xff1a;https://blog.csdn.net/liu834189447/article/details/135246914 短暂解决访问问题。 ping不通虚拟机/无法连接虚拟机&#xff1a;https://blog.csdn.net/liu834189447/article/details/135240276 ps: Xshell、ubuntu的粘贴快捷键为 Shift Insert …