HDU - 6397 Character Encoding 插板法+容斥原理

该博客探讨了如何利用插板法和容斥原理解决组合数学问题,具体为计算在一定的限制条件下,将相同小球分配到不同盒子的种类数。在题设中,需要保证每个盒子的球数小于给定的n,并通过增加总球数和排除不符合条件的情况来应用容斥原理。
摘要由CSDN通过智能技术生成

题意:

a1 + a2 + ... + am = k , 0 <= ai < n;  给定n m  k 问:上述式子成立的种类数有多少,1+2=3 和 2+1=3 是两种情况

思路:

说到这个题必须要说的是组合数学的隔板法:

①k个相同的小球放入m个不同的盒子,每个盒子不为空的种类数:k-1个空隙中插入m-1个板子,C(k-1, m-1)

②k个相同的小球放入m个不同的盒子,可以允许有的盒子为空种类数:我们再加上m个球,按照①式不为空求解,因为分割完后,每个盒子减去1,就是当前问题的解,即:C(k-1+m, m-1);

 

对于本题,可以理解成k个相同的球放入m个不同的盒子,每个盒子可以为空,但是个数不能大于等于n;

正男则反,我们算总的减去大于等于n个情况的种类数,容斥一下、待更、、

 

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
const int maxn = 2e5 + 7;

ll n, m, k;
ll fac[maxn], inv[maxn];

ll pow_(ll a, ll n) {
  ll res = 1LL; a %= mod;
  while(n) {
    if(n&1) res = res * a % mod;
    a = a 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值