隔板法(求解的组数)
文章目录
- 隔板法(求解的组数)
- 隔板法
- 扩展
- 例题
隔板法(求解的组数)
文章首发于我的个人博客:欢迎大佬们来逛逛
隔板法
隔板法能够解决的问题:
- 求线性不定方程的解的组数
- 求相同元素分组的方案数
给我们 n n n 个球, k k k 个盒子,要求把这些球放进这些盒子中,一共有多少种不同的放的方案数?
例如:
n = 4 , k = 3 n=4,k=3 n=4,k=3 ,方案如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IUTQYuPA-1685533049927)(%E9%9A%94%E6%9D%BF%E6%B3%95%EF%BC%88%E6%B1%82%E8%A7%A3%E7%9A%84%E7%BB%84%E6%95%B0%EF%BC%89%206f4140365b494c00a1407852acf8dd57/Untitled.png)]
容易看出,我们可以划分为 1 1 2 ; 1 2 1; 2 1 1 三种不同的方案。
我们可以把这个问题转换为这样的一个模型:
- 在 x i > = 1 x_i>=1 xi>=1 的条件下,求 x 1 + x 2 + x 3 + . . . + x k = n x_1+x_2+x_3+...+x_k=n x1+x2+x3+...+xk=n 的方程解的组数
即在这个问题中,方程的解的组数就是:
- ( x 1 , x 2 , x 3 ) = ( 1 , 1 , 2 ) (x_1,x_2,x_3)=(1,1,2) (x1,x2,x3)=(1,1,2)
- ( x 1 , x 2 , x 3 ) = ( 1 , 2 , 1 ) (x_1,x_2,x_3)=(1,2,1) (x1,x2,x3)=(1,2,1)
- ( x 1 , x 2 , x 3 ) = ( 2 , 1 , 1 ) (x_1,x_2,x_3)=(2,1,1) (x1,x2,x3)=(2,1,1)
如何解决这个问题呢?
注意到我们总共有 k = 3 k=3 k=3 个盒子,相当于我们有 k − 1 = 2 k-1=2 k−1=2 块板子,然后把这两块板子放到不同的间隔方案数。
对于板子,我们有 k − 1 k-1 k−1 块;对于间隔,我们有 n − 1 n-1 n−1 个位置。
因此就是求: ∗ ∗ C n − 1 k − 1 **C_{n-1}^{k-1} ∗∗Cn−1k−1 的方案数**
扩展
与前面不同,我们需要求在 x i > = 0 x_i>=0 xi>=0 的条件下,求 x 1 + x 2 + x 3 + . . . + x k = n x_1+x_2+x_3+...+x_k=n x1+x2+x3+...+xk=n 的方程解的组数
假设 y i = x i + 1 y_i=x_i+1 yi=xi+1 ,那么 y 1 + y 2 + y 3 + . . . + y k = n + k = m y_1+y_2+y_3+...+y_k=n+k=m y1+y2+y3+...+yk=n+k=m
因此就可以转换为求: C m − 1 k − 1 = C n + k − 1 k − 1 C_{m-1}^{k-1} =C_{n+k-1}^{k-1} Cm−1k−1=Cn+k−1k−1 的方法数
我们需要求在 x i > = a i > = 0 , ∑ 1 n a i < = p x_i>=a_i>=0, \sum_{1}^{n}a_i<=p xi>=ai>=0,∑1nai<=p 的条件下,求 x 1 + x 2 + x 3 + . . . + x k = n x_1+x_2+x_3+...+x_k=n x1+x2+x3+...+xk=n 的方程解的组数
假设 y i = x i − a i + 1 y_i=x_i-a_i+1 yi=xi−ai+1,那么 y 1 + y 2 + y 3 + . . . + y k = n − ∑ 1 k a i + k = m y_1+y_2+y_3+...+y_k=n-\sum_{1}^{k}a_i+k=m y1+y2+y3+...+yk=n−∑1kai+k=m
因此就可以转换为求: C m − 1 k − 1 = C n − ∑ i = 1 k a i + k k − 1 C_{m-1}^{k-1}=C_{n-\sum_{i=1}^{k}a_i+k}^{k-1} Cm−1k−1=Cn−∑i=1kai+kk−1 的方案数
例题
方程的解 - 洛谷
- 首先求出 x x m o d 1000 x^x mod\space 1000 xxmod 1000 的值,作为 n n n
- 然后直接求对应的方案数: C n − 1 k − 1 C_{n-1}^{k-1} Cn−1k−1
- 对于如何处理这个组合数,我们使用求组合数的递推的方法,其中我们需要用到高精度加法来处理。
#include<bits/stdc++.h>
#if 1#define int long long
#endifconst int N=150,p=1000;
int n,k,x;
int dp[1001][101][N+10];
int qpow(int a,int b,int p){int ans=1;while (b){if (b&1){ans=ans*a%p;}a=a*a%p;b>>=1;}return ans;
}
void add(int ans[],int A[],int B[]){for (int i=0;i<=N;i++){ans[i]+=A[i]+B[i];ans[i+1]+=ans[i]/10;ans[i]%=10;}
}
void solve(int nn,int mm){//求组合数: C(1000,100)for (int i=0;i<=nn;i++){for (int j=0;j<=i && j<=mm;j++){if (j==0){dp[i][j][0]=1;}else{//高精度加法add(dp[i][j],dp[i-1][j],dp[i-1][j-1]);}}}
}
signed main(){std::cin>>k>>x;n=qpow(x,x,p);//a1+a2+a3...+ak=n//正整数解组数: 满足ai>=1solve(n-1,k-1);int i=N-1;//跳过前导0while (dp[n-1][k-1][i]==0){i--;}while (i>=0){std::cout<<dp[n-1][k-1][i--];}return 0;
}
相关文章:
隔板法(求解的组数)
文章目录 隔板法(求解的组数)隔板法扩展 例题 隔板法(求解的组数) 文章首发于我的个人博客:欢迎大佬们来逛逛 隔板法 隔板法能够解决的问题: 求线性不定方程的解的组数求相同元素分组的方案数 给我们 …...

智能文档处理黑科技,拥抱更高效的数字世界
目录 0 写在前面1 为何要关注智慧文档?2 图像弯曲矫正3 手写板反光擦除4 版面元素检测5 文档篡改检测总结 0 写在前面 近期,中国图象图形学学会文档图像分析与识别专业委员会与上海合合信息科技有限公司联合打造了《文档图像智能分析与处理》高峰论坛。…...

vue ts写法
Vue.js 和 TypeScript 结合使用可以让你的项目更加健壮和易于维护。在 Vue 3 中,你可以使用 Vue.js 的 Composition API 和 TypeScript 一起使用。以下是一个简单的 Vue.js 和 TypeScript 结合使用的例子: 首先,确保你已经安装了 Vue.js 和 T…...
Unity中的PostProcessBuild:深入解析与实用案例
Unity中的PostProcessBuild:深入解析与实用案例 在Unity游戏开发中,我们经常需要在构建完成后对生成的应用程序进行一些额外的处理。这时,我们可以使用Unity提供的PostProcessBuild功能。本文将详细介绍Unity中的PostProcessBuild方法&#…...

SimpleCG绘图函数(4)--绘制圆
在前一篇教程我们利用绘制矩形功能绘制了一个城市,接下来我们讲解另外一个同样重要且基础的图形----圆形。并一起看看该图形能绘制哪些应用呢。 绘制圆形相关函数如下: //圆心坐标(nXCenter,nYCenter),半径为nRatio//绘无填充制圆 void circle( int nXCenter, int …...
打包和优化
私人博客 许小墨のBlog —— 菜鸡博客直通车 系列文章完整版,配图更多,CSDN博文图片需要手动上传,因此文章配图较少,看不懂的可以去菜鸡博客参考一下配图! 系列文章目录 前端系列文章——传送门 后端系列文章——传送…...

linuxOPS基础_Linux文件管理
Linux下文件命名规则 可以使用哪些字符? 理论上除了字符“/”之外,所有的字符都可以使用,但是要注意,在目录名或文件名中,不建议使用某些特殊字符,例如, <、>、?、* 等&…...

C语言——数据在内存中的存储(上)
数据在内存中的存储 1. 数据类型的介绍 之前已经介绍过C语言中的基本数据类型了,主要有: char //字符数据类型short //短整型int //整形long //长整型long long //更长的整形float //单精度浮点数double //双精度浮点数 注意:C语言中是是没…...
LinkedIn 国际版怎么在国内登录?怎么使用领英国际版?
自从去年底国内用户使用LinkedIn就只能跳转到领英职场,而且就只是一个简单的招聘求职平台,没办法搜索添加国外客户,开发客户资源的效率大打折扣。但是国际版领英就不受影响,东哥今天就给各位做外贸的朋友分享如何使用国际版领英。…...
QThread Class
QThread QThread类枚举类型成员函数可重写函数公共槽信号静态成员函数保护函数静态保护函数QThread简单案例1QThread简单案例2 QThread类 标准头文件:#include <QThread> qmake: QT core 继承(父): QObject枚举类型 线程的优先级 enum Priority { IdlePri…...
C语言中的运算符及其优先级详解
引言: 在C语言中,运算符是用于进行各种数学和逻辑运算的符号。了解不同类型的运算符及其优先级对于正确理解和编写C语言代码至关重要。本文将详细介绍C语言中常用的运算符,包括算术运算符、赋值运算符、比较运算符、逻辑运算符等,…...

【C语言】语言篇——数组和字符串
C站的小伙伴们,大家好呀😝😝!我最近在阅读学习刘汝佳老师的《算法竞赛入门经典》,今天将整理本书的第三章——数组和字符串的一些习题,本章习题较多,下选取部分习题进行练习总结,在这…...
Js写的二级联动和三级联动
二级联动的实现 第一步 在HTML页面创建两个 select 下拉列表元素,并设置id为 ‘province’和id ‘city’ <!--省份--> <select id"province" onchange"getCity()"></select><!--城市--> <select id"city&qu…...

一文带你了解UI自动化测试框架
PythonSeleniumUnittestDdtHTMLReport分布式数据驱动自动化测试框架结构 1、Business:公共业务模块,如登录模块,可以把登录模块进行封装供调用 ------login_business.py from Page_Object.Common_Page.login_page import Login_Page from H…...

【Linux】守护进程
守护进程(Daemon)是一种在后台运行的特殊进程。它通常在操作系统启动时启动,并一直运行直至系统关闭。它不与任何终端关联,并且没有标准输入、输出和错误流。它的主要作用是在系统启动后执行一些特定的任务或者提供某些服务&#…...
Vue中组件和插件有什么区别?
Vue中组件和插件有什么区别? 组件是什么 组件就是把图形、非图形的各种逻辑均抽象为一个统一的概念(组件)来实现开发的模式,在Vue中每一个.vue文件都可以视为一个组件 组件的优势 降低整个系统的耦合度,在保持接口…...

第五章 图像处理
文章目录 前言一、图像金字塔1.高斯金字塔2.拉普拉斯金字塔 二、图像轮廓1. 轮廓提取2. 轮廓绘制3. 轮廓特征4. 轮廓近似5. 轮廓标记 三、模板匹配四、直方图1. 对比度2. 绘制直方图3. 均衡化3.1 理论3.2 代码 4. CLAHE 五、图像傅里叶变换5.1 正弦平面波5.2 二维傅里叶变换5.3…...

算法8.从暴力递归到动态规划1
算法|8.从暴力递归到动态规划1 目前感觉,背包问题和货币数组问题本质相同,货币的与dp相关的三种代码写完了,快复习不完了,背包暂时先不写了,回头再写,补充,再总结,结合那个C大神的文…...

8-JDBC 编程
目录 1.数据库编程的必备条件 PS:程序是怎么操作数据库的? 2.什么是JDBC? 2.1.JDBC定义 2.2.JDBC工作原理 3.JDBC使用 3.1.创建项目并添加MySQL驱动包 3.2.使用代码操作数据库 3.2.1.获得数据源 3.2.2.获得连接 3.2.3.获得执行器 …...

零基础如何学习 Web 安全?
Web安全不仅是互联网的核心,而且还是云计算和移动互联网的最佳载体。对于信息安全从业者而言,Web安全是一个非常重要的研究课题之一。 Web应用是指采用B/S架构、通过HTTP/HTTPS协议提供服务的统称。随着互联网的广泛使用,社交网络、聊天工具…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
tomcat入门
1 tomcat 是什么 apache开发的web服务器可以为java web程序提供运行环境tomcat是一款高效,稳定,易于使用的web服务器tomcathttp服务器Servlet服务器 2 tomcat 目录介绍 -bin #存放tomcat的脚本 -conf #存放tomcat的配置文件 ---catalina.policy #to…...

java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...

简单聊下阿里云DNS劫持事件
阿里云域名被DNS劫持事件 事件总结 根据ICANN规则,域名注册商(Verisign)认定aliyuncs.com域名下的部分网站被用于非法活动(如传播恶意软件);顶级域名DNS服务器将aliyuncs.com域名的DNS记录统一解析到shado…...
关于疲劳分析的各种方法
疲劳寿命预测方法很多。按疲劳裂纹形成寿命预测的基本假定和控制参数,可分为名义应力法、局部应力一应变法、能量法、场强法等。 1名义应力法 名义应力法是以结构的名义应力为试验和寿命估算的基础,采用雨流法取出一个个相互独立、互不相关的应力循环&…...