CF451E Devu and Flowers
多重集求组合数,注意到\(n = 20\)所以可以用\(2 ^ n * n\)的容斥来写。
如果没有限制那么答案就是\(C(n + s - 1, n - 1)\)。对每一个限制依次考虑,加上有一种选多的,减去有两种选多的,以此类推。
由于\(n <= 20\),所以组合数事实上是可以\(O(N)\)求的=_=
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int Mod = 1000000007;
const int N = (1 << 20) + 5;
int add (int x, int y) {return (((0ll + (x % Mod) + (y % Mod)) % Mod) + Mod) % Mod;}
int mul (int x, int y) {return (((1ll * (x % Mod) * (y % Mod)) % Mod) + Mod) % Mod;}
int n, s, f[21], fac[21], inv[21];
int C (int n, int m) {
int res = 1;
for (int i = n - m + 1; i <= n; ++i) res = mul (res, i);
res = mul (res, inv[m]);
return res;
}
int fpow (int x, int y) {
int res = 1;
while (y) {
if (y & 1) {
res = mul (res, x);
}
x = mul (x, x);
y >>= 1;
}
return res;
}
signed main () {
cin >> n >> s;
for (int i = 1; i <= n; ++i) {
cin >> f[i];
}
fac[0] = 1;
for (int i = 1; i <= n; ++i) {
fac[i] = mul (fac[i - 1], i);
}
inv[n] = fpow (fac[n], Mod - 2);
for (int i = n; i >= 1; --i) {
inv[i - 1] = mul (inv[i], i);
}
int ans = C (n + s - 1, n - 1);
for (int i = 1; i < (1 << n); ++i) {
int w = 0, del = 0, have_wei = 0;
for (int j = 0; j < n; ++j) {
if (i & (1 << j)) {
have_wei++;
del += f[j + 1] + 1;
}
}
w = have_wei & 1 ? -1 : + 1;
if (s >= del) {
ans = add (ans, w * C (n + s - 1 - del, n - 1));
}
}
cout << ans << endl;
}
CF451E Devu and Flowers的更多相关文章
- CF451E Devu and Flowers 解题报告
CF451E Devu and Flowers 题意: \(Devu\)有\(N\)个盒子,第\(i\)个盒子中有\(c_i\)枝花.同一个盒子内的花颜色相同,不同盒子的花颜色不同.\(Devu\)要 ...
- CF451E Devu and Flowers(容斥)
CF451E Devu and Flowers(容斥) 题目大意 \(n\)种花每种\(f_i\)个,求选出\(s\)朵花的方案.不一定每种花都要选到. \(n\le 20\) 解法 利用可重组合的公 ...
- CF451E Devu and Flowers (隔板法 容斥原理 Lucas定理 求逆元)
Codeforces Round #258 (Div. 2) Devu and Flowers E. Devu and Flowers time limit per test 4 seconds me ...
- BZOJ1101 [POI2007]Zap 和 CF451E Devu and Flowers
Zap FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到 ...
- CF451E Devu and Flowers(组合数)
题目描述 Devu想用花去装饰他的花园,他已经购买了n个箱子,第i个箱子有fi朵花,在同一个的箱子里的所有花是同种颜色的(所以它们没有任何其他特征).另外,不存在两个箱子中的花是相同颜色的. 现在De ...
- Luogu CF451E Devu and Flowers 题解报告
题目传送门 [题目大意] 有n种颜色的花,第i种颜色的花有a[i]朵,从这些花中选m朵出来,问有多少种方案?答案对109+7取模 [思路分析] 这是一个多重集的组合数问题,答案就是:$$C_{n+m- ...
- CF451E Devu and Flowers 数论
正解:容斥+Lucas定理+组合数学 解题报告: 传送门! 先mk个我不会的母函数的做法,,, 首先这个题的母函数是不难想到的,,,就$\left ( 1+x_{1}^{1}+x_{1}^{2}+. ...
- CF451E Devu and Flowers (组合数学+容斥)
题目大意:给你$n$个箱子,每个箱子里有$a_{i}$个花,你最多取$s$个花,求所有取花的方案,$n<=20$,$s<=1e14$,$a_{i}<=1e12$ 容斥入门题目 把取花 ...
- [题解] [CF451E] Devu and Flowers
题面 题解 就是一个求\(\sum_{i= 1}^{n}x _ i = m\)的不重复多重集的个数, 我们可以由容斥原理得到: \[ ans = C_{n + m - 1}^{n - 1} - \su ...
随机推荐
- Servlet--创建和配置Servlet
在web开发中,一般由Servlet进行数据流的控制,并通过HttpServletResponse对象对请求做出响应.创建的Servlet必须继承HttpServlet类,并实现doGet()和doP ...
- js实现浏览器调用电脑的摄像头拍照
<!DOCTYPE html> <html lang="en"> <head> <style> * { margin: ; padd ...
- Android 沉浸式状态栏完美解决方案
现在搜索Android 沉浸式状态栏,真的是一堆一堆,写的特别多,但是真正用的舒服的真没有,在这里自己整理一下开发记录 注意,在使用这个步骤过程之前,请把之前设置的代码注释一下 把布局带有androi ...
- 每天五分钟-javascript数据类型
javascript数据类型分为基本数据类型与复杂数据类型 基本数据类型包括:string,number,boolean,null,undefined,symbol(es6) 复杂数据类型包括:obj ...
- Android Studio教程06-布局,监听器以及基本控件
目录 2. 监听器 3. 布局 3.1. 布局分类 (1). Linear Layout (2). Relative Layout (3). ListView (4). Grid View 4. 其他 ...
- Glide的 java.lang.RuntimeException: Expected instanceof GlideModule, but found:X.GlideModule@2e4554f
问题一 在添加过混淆规则后,App打包的时候,发现报错了 java.lang.RuntimeException: Expected instanceof GlideModule, but found: ...
- docker 集群 zookeeper 碰到 java.net.NoRouteToHostException: Host is unreachable (Host unreachable)
最近在学 zookeeper ,按照 docker 官网的方式集群 zookeeper , 然后发现有路由找不到.最后问题解决了,随手记录下来. 原因是 firewalld 的没有信任 docker ...
- $.each()、$.map()区别浅谈
遍历应该是各种语言中常会用到的操作了,实现的方法也很多,例如使用for.while等循环语句就可以很轻松的做到对数组或对象的遍历,今天想讲的不是它们,而是简单方便的遍历方法. 大致的整理了一下,经常用 ...
- java网络爬虫基础学习(一)
刚开始接触java爬虫,在这里是搜索网上做一些理论知识的总结 主要参考文章:gitchat 的java 网络爬虫基础入门,好像要付费,也不贵,感觉内容对新手很友好. 一.爬虫介绍 网络爬虫是一个自动提 ...
- 总结JAVA----IO流中的字节流
对于IO流中字节流的总结 字节流的概念 由于应用程序,经常需要和文件打交道,所以Inputstream专门提供了读写文件的子类:FileInputStream和FileOutputStream类,如果 ...