一道不错的题,对排列组合能力的要求较高

题意:给定s个相同的小球放在n个不同的盒子里,可以不放,每个盒子有一个放的上限,求一共有多少种放法

解析:首先考虑没有上限的情况,这里比较好解决,采用隔板法,可以计算出放法为

看到网上很少有对这个隔板法进行详解的,这里稍微做一下解释:

隔板法,顾名思义,就是采用放置隔板的方法来进行分组方式的计算,在这里,由于每个小球都是相同的,所以唯一产生不同的可能性就是不同盒子里放的小球个数不同,那么这就转化为了一个分组问题:将s个小球用n-1个隔板分为n组,问方案数有多少

但有一个问题,就是盒子可以不放,如果单纯用隔板的话对于不放的盒子是处理不了的

所以我们再引入n个小球,要求每个盒子至少放一个,这样就能解决这个问题了

所以答案是

接下来,由于现在有上限,所以直接用这个答案是显然不对的。

于是我们考虑容斥。

那么显然,容斥方法就是至少有0个超过上限-至少有1个超过上限+至少有2个超过上限...

那么我们以至少有一个超过上限的算法举例:

显然,我们首先要枚举谁超过了上限,那么这一步可以使用状压来实现,将超过上限的点的状态记作1,其余点状态记作0即可,这样的思想也可以解决更多超过上限的情况。

接下来,我们考虑:至少一个超过上限的表现就是这一个盒子至少放了上限+1个球,而其余盒子随意,不做要求,故我们可以理解为首先将上限+1个球确定地放在这一个盒子里,然后把剩下的球随便放

那么剩下的球随便放的方法同样满足公式

(当然,球的总数会发生改变)

这样问题就解决了。

(其实推导之后有一个总的排列组合公式可以解决这个问题,但基本上看到这个公式正常人就跑了,所以这里只提出思想,因为事实上在实现的时候还是基于这个思想而不是基于最后的结论公式的)

#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#include <queue>
#include <stack>
#define mode 1000000007
#define ll long long
using namespace std;
ll pow_mul(ll x,ll y)
{
ll ans=1;
while(y)
{
if(y&1)
{
ans*=x;
ans%=mode;
}
x*=x;
x%=mode;
y>>=1;
}
return ans;
}
ll n;
ll f[25];
ll s;
int main()
{
scanf("%lld%lld",&n,&s);
for(int i=1;i<=n;i++)
{
scanf("%lld",&f[i]);
}
ll ret=0;
for(int i=0;i<(1<<n);i++)
{
int flag=1;
ll tot=s;
for(int j=0;j<n;j++)
{
if(i&(1<<j))
{
flag=-flag;
tot-=(f[j+1]+1);
}
}
if(tot<0)
{
continue;
}
ll s1=1,s2=1;
for(int j=1;j<=n-1;j++)
{
s1*=(tot+j)%mode;
s1%=mode;
s2*=j;
s2%=mode;
}
s1*=pow_mul(s2,mode-2);
ret+=flag*s1;
ret=((ret%mode)+mode)%mode;
}
printf("%lld\n",ret);
return 0;
}

CF451E的更多相关文章

  1. CF451E Devu and Flowers 解题报告

    CF451E Devu and Flowers 题意: \(Devu\)有\(N\)个盒子,第\(i\)个盒子中有\(c_i\)枝花.同一个盒子内的花颜色相同,不同盒子的花颜色不同.\(Devu\)要 ...

  2. CF451E Devu and Flowers(容斥)

    CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公 ...

  3. CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)

    Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...

  4. CF451E Devu and Flowers

    多重集求组合数,注意到\(n = 20\)所以可以用\(2 ^ n * n\)的容斥来写. 如果没有限制那么答案就是\(C(n + s - 1, n - 1)\).对每一个限制依次考虑,加上有一种选多 ...

  5. Luogu CF451E Devu and Flowers 题解报告

    题目传送门 [题目大意] 有n种颜色的花,第i种颜色的花有a[i]朵,从这些花中选m朵出来,问有多少种方案?答案对109+7取模 [思路分析] 这是一个多重集的组合数问题,答案就是:$$C_{n+m- ...

  6. CF451E Devu and Flowers 数论

    正解:容斥+Lucas定理+组合数学 解题报告: 传送门! 先mk个我不会的母函数的做法,,, 首先这个题的母函数是不难想到的,,,就$\left (  1+x_{1}^{1}+x_{1}^{2}+. ...

  7. CF451E Devu and Flowers(组合数)

    题目描述 Devu想用花去装饰他的花园,他已经购买了n个箱子,第i个箱子有fi朵花,在同一个的箱子里的所有花是同种颜色的(所以它们没有任何其他特征).另外,不存在两个箱子中的花是相同颜色的. 现在De ...

  8. CF451E Devu and Flowers (组合数学+容斥)

    题目大意:给你$n$个箱子,每个箱子里有$a_{i}$个花,你最多取$s$个花,求所有取花的方案,$n<=20$,$s<=1e14$,$a_{i}<=1e12$ 容斥入门题目 把取花 ...

  9. BZOJ1101 [POI2007]Zap 和 CF451E Devu and Flowers

    Zap FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到 ...

随机推荐

  1. Core Mvc传值ViewData、ViewBag和return view(model)

    先定义一个Model类Student namespace Lession.Models { public class Student { public string Name { get; set; ...

  2. python小练习,密码等级问题

    . # 密码安全性检查代码 . # . # 低级密码要求: . # . 密码由单纯的数字或字母组成 . # . 密码长度小于等于8位 . # . # 中级密码要求: . # . 密码必须由数字.字母或 ...

  3. DataGrid 查出一个列 按要求显示格式 例如:操作人(地点)

    这是转换DataGrid显示格式之后 连接字符串的方法 显示:操作人(地点) public static ObservableCollection<CListModel> AllUserL ...

  4. centos U盘挂载问题

    查看u盘路径 fdisk -l Disk /dev/sda: 16.2 GB, 16236150784 bytes, 31711232 sectors Units = sectors of 1 * 5 ...

  5. java中equals,hashcode和==的区别

    https://www.cnblogs.com/kexianting/p/8508207.html

  6. 【VMware vSphere】使用U盘给戴尔服务器安装ESXi6.0系统

    写在前面:          安装ESXi系统需要准备两个U盘,而且Raid已经做好          说明:          两个U盘,一个为启动盘(类似于大白菜),另一个作为安装系统使用(类似于 ...

  7. 利用C#进行AUTOCAD的二次开发

    众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp.但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++, ...

  8. Codeforces Educational Round 37

    Solved   CodeForces 920A Water The Garden   Solved   CodeForces 920B Tea Queue   Solved   CodeForces ...

  9. druid安装

    只要下载duridjar包,然后在web.xml配置拦截器(此处不配置监控无法显示web情况,只能看到sql情况)和servlet, 然后在spring配置文件中修改DataSource即可.

  10. webstorm加载项目卡死在scanning files to index

    今天用webstorm导入项目时,需要加载node-modules文件夹,导致webstorm非常卡,页面提示scanning files to index... 网上搜到办法,记录下: 说明: 在n ...