/*
给定n个盒子,第i个盒子有ai朵花,现在从中选取m朵花,问选取方案数
用容斥定理解决 m=x1+x2+..+xn
C(m+n-1,n-1)+sum{ (-1)^p * C(m+n-1-(1+n1)-(1+np),n-1) }

*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
ll ans,n,s,A[],inv[]; ll Pow(ll a,ll b){
ll res=;
while(b){
if(b%)
res=res*a%mod;
b>>=;a=a*a%mod;
}
return res;
}
ll C(ll y,ll x){
if(y<||x<||y<x)return ;
y%=mod;
if(y==|| x==)return ;
ll ans=;
for(ll i=;i<x;i++)
ans=(ll)ans*(y-i)%mod;
for(ll i=;i<=x;i++)
ans=ans*inv[i]%mod;
return ans;
} int main(){
cin>>n>>s;
for(ll i=;i<=;i++)
inv[i]=Pow(i,mod-); for(int i=;i<n;i++)cin>>A[i]; for(ll i=;i<(<<n);i++){
ll a=n-,b=s+n-,tmp=;
if(i==){
ans=(ans+C(b,a))%mod;
continue;
}
for(int j=;j<n;j++)
if(i & ((ll)<<j)){
tmp++;
b-=A[j]+;
}
if(tmp%){//减法
ans=(ans-C(b,a))%mod;
ans=(ans+mod)%mod;
}
else {
ans=(ans+C(b,a))%mod;
}
}
cout<<ans<<'\n';
}

最新文章

  1. Java集合---ConcurrentHashMap原理分析
  2. 终于完成了Josephus的C语言实现啦~~
  3. js获取随机色
  4. C++虚函数的缺陷
  5. ANDROID_MARS学习笔记_S03_004_getAllProviders、LOCATIONLISTENER、getBestProvider
  6. python urllib2模块携带cookie
  7. HDOJ(HDU) 2503 a/b + c/d(最大公约数问题)
  8. mysql5.5.17源代码安装
  9. Sql server not in优化
  10. 深入理解C++11【3】
  11. mpdf-html转PDF,中文字符乱码、加粗问题
  12. 【转】Mac OS X 上修改主机名
  13. redis调优的实战经验
  14. Tomcat8.5配置https启动报空指针错误
  15. 在Centos 6 64bit 上安装 Hyperic HQ 5.8.2.1 中文版
  16. ModuleNotFoundError: No module named &#39;_pydevd_bundle.pydevd_cython&#39; error on debug
  17. Spring源码解析二:IOC容器初始化过程详解
  18. 如何查看Isilon的节点的CPU的信息?
  19. C#学习笔记之(Hellow,WORLD;常量和变量;键盘输入和输出;数据类型转换;计算器)
  20. webpack+vuecli打包常见的2个坑

热门文章

  1. Python中 将数据插入到Word模板并生成一份Word
  2. 同时安装不同版本jdk引起的冲突解决方法
  3. hbuilder 配置app为沉浸式状态栏
  4. 线程池——Executors
  5. Java中的Set集合以及HashSet
  6. C/C++ volatile
  7. magento开发 -- 修改当前用户的客户组
  8. 每天一个Linux命令:ls(1)
  9. 【原理】RabbitMQ概要图
  10. 一场comet常规赛的台前幕后