隔板法(求解的组数)

news/2024/11/28 21:54:06/

文章目录

  • 隔板法(求解的组数)
  • 隔板法
    • 扩展
  • 例题

隔板法(求解的组数)

文章首发于我的个人博客:欢迎大佬们来逛逛

隔板法

隔板法能够解决的问题:

  • 求线性不定方程的解的组数
  • 求相同元素分组的方案数

给我们 n n n 个球, k k k 个盒子,要求把这些球放进这些盒子中,一共有多少种不同的放的方案数

例如:

n = 4 , k = 3 n=4,k=3 n=4k=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 的方程解的组数

即在这个问题中,方程的解的组数就是:

  1. ( x 1 , x 2 , x 3 ) = ( 1 , 1 , 2 ) (x_1,x_2,x_3)=(1,1,2) (x1,x2,x3)=(1,1,2)
  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)
  3. ( 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 k1=2 块板子,然后把这两块板子放到不同的间隔方案数。

对于板子,我们有 k − 1 k-1 k1 块;对于间隔,我们有 n − 1 n-1 n1 个位置。

因此就是求: ∗ ∗ C n − 1 k − 1 **C_{n-1}^{k-1} Cn1k1 的方案数**


扩展

与前面不同,我们需要求在 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} Cm1k1=Cn+k1k1方法数


我们需要求在 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=xiai+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=n1kai+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} Cm1k1=Cni=1kai+kk1方案数


例题

方程的解 - 洛谷

  1. 首先求出 x x m o d 1000 x^x mod\space 1000 xxmod 1000 的值,作为 n n n
  2. 然后直接求对应的方案数: C n − 1 k − 1 C_{n-1}^{k-1} Cn1k1
  3. 对于如何处理这个组合数,我们使用求组合数的递推的方法,其中我们需要用到高精度加法来处理。
#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;
}

http://www.ppmy.cn/news/125958.html

相关文章

飞腾E2000概述

E2000 行业开发板是飞腾公司在嵌入式领域的一个重要里程碑产品&#xff0c;也是飞腾基于 “核心技术自主创新&#xff0c;产业生态开放联合” 这一发展理念所取得的重要实践成果。双椒派通过与大学开展教学合作&#xff0c;可以为CPU国产化&#xff0c;打下坚实的基础。

华为一口气发布十余款新品,HarmonyOS用户过亿

9月13日19:30&#xff0c;华为在线上举办了智慧办公新品发布会。本次发布会带来了华为MateBook 13s笔记本电脑、华为MateBook 14s笔记本电脑、华为MateStation X一体机、华为PixLab X1打印机、华为MateView GT 27英寸曲面屏显示器以及华为MatePad Pro 12.6英寸套装版等十余款新…

【Java并发】10个线程处理完任务后,再合并处理,CountDownLatch的用法

代码 线程一起执行&#xff1a; import java.util.*; import java.util.concurrent.*;public class Main {public static List<String> getExecutorService() throws InterruptedException{System.out.println("开始执行多线程...");long startTime System.…

中兴ZTE_B860AV2.1-A、2.1-M、2.1-B_1g-2g_通刷语音固件包

中兴ZTE_B860AV2.1-A、2.1-M、2.1-B_1g-2g_通刷语音固件超级桌面 固件特点&#xff1a; 1、修改dns&#xff0c;三网通用&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、无开机广告&#xff0c;无系统更新&#xff0c;不在被强制升级&#xff1b;…

微星 B660M 迫击炮 评测

微星 B660M 迫击炮主板搭载了 1 个 PCIe 4.0 *16 显卡插槽和一个 PCIe 3.0 *16 显卡插槽&#xff0c;支持 DDR5-6200 超频内存&#xff0c;配备两个 PCIe 4.0 的 M.2 插槽。微星 B660M 迫击炮更多使用感受和评价&#xff1a;http://www.adiannao.cn/du 后置 IO 面板方面&…

浏览器用xpath获取一直为空

这两天闲的无聊&#xff0c;随便爬了点小说和趣图&#xff0c;因为好久没使用xpath了&#xff0c;所以遇到了点问题&#xff0c;就是xpath值一直为空&#xff0c;举个例子: 爬取小说网站。 使用xpath工具查询小说网站导航栏的xpath路径是这样子的: 值是酱紫的: 用python测试下…

解决Idea Translation插件翻译失败 更新TKK失败 time out 问题

idea 版本&#xff1a;2019.3.3 Translation版本&#xff1a;v2.9.3-193 错误截图&#xff1a; 错误日志&#xff1a; >Plugin v2.9.3-193 >IntelliJ IDEA 2019.3.3 >Build #IU-193.6494.35, built on February 11, 2020 >Runtime version: 11.0.510-b5…

联想微型计算机怎么开盖,联想b520一体机拆机图解

联想b520一体机拆机图解 一体机又称一体台式机&#xff0c;这一概念最先由联想集团提出&#xff0c;是指将传统分体台式机的主机集成到显示器中&#xff0c;从而形成一体台式机。联想是中国第一个拥有百万一体台式机用户的品牌厂商&#xff0c;并以其领先分体台式机的主机集成到…