当前位置: 首页 > news >正文

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;
}

转载于:https://www.cnblogs.com/maomao9173/p/10643992.html

相关文章:

  • Android之RxJava详解
  • 知道大数据却不清楚工业大数据,知识架构“欠”在哪里?
  • 些许注意事项(初学)
  • 漫话:如何给女朋友解释什么是乐观锁与悲观锁
  • koa2框架的使用与解析
  • Beaglenone读取编码器数据
  • 数据库引擎类型
  • python连接hbase
  • 函数计算新功能-----支持C#函数
  • 记一次内存溢出的分析经历
  • 求唯一一个只出现一次的数字
  • Java设计模式--装饰器模式到Java IO 流
  • 【iOS工具】快速上传ipa文件到iTunes Connect
  • 使用DataWorks调度DLA循环任务
  • postgresql行列转换函数
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • PHP 7 修改了什么呢 -- 2
  • Redis 懒删除(lazy free)简史
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • SpiderData 2019年2月23日 DApp数据排行榜
  • web标准化(下)
  • 目录与文件属性:编写ls
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 通过几道题目学习二叉搜索树
  • 微信小程序:实现悬浮返回和分享按钮
  • 微信小程序设置上一页数据
  • 写代码的正确姿势
  • 自动记录MySQL慢查询快照脚本
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #laravel 通过手动安装依赖PHPExcel#
  • (c语言)strcpy函数用法
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)spring boot球鞋文化交流论坛 毕业设计 141436
  • (四)c52学习之旅-流水LED灯
  • (算法)N皇后问题
  • (转载)从 Java 代码到 Java 堆
  • ***监测系统的构建(chkrootkit )
  • *Django中的Ajax 纯js的书写样式1
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET delegate 委托 、 Event 事件
  • /boot 内存空间不够
  • /etc/fstab和/etc/mtab的区别
  • @RequestMapping-占位符映射
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解