(容斥原理例题)洛谷P1287 盒子与球

题目链接

点击此处前往

题目思路

标题就不难知道,这是一道关于容斥原理的题目

只需要简单一想就不难发现,这道题很可能会有很多重复的情况,就比如说我原来想的一个思路,先找出 r 个球来铺满第一层,然后再排列剩下的小球,这就会有很多重复的情况,比如说第一层的去了第二层,但是只是上下顺序变了但是总体顺序没变,这就造成了重复的情况

那么我们不妨反过来想

n 个小球放到 r 个盒子里一共有多少种放法呢?

一想就能想到
方案数 = r n 方案数 = r^n 方案数=rn
因为每个小球都有r个盒子可以放,所有就是n个r相乘

那么至少一个盒子是空着的呢?

结果也是显而易见的
方案数 = C r 1 ∗ ( r − 1 ) n 方案数 = C_r^1 * (r - 1)^n 方案数=Cr1(r1)n
一共有r个盒子,并且互不相同,所以哪个是空的不确定,由于是至少一个盒子是空的,所以就是每个小球有r-1个盒子可以放,也就是n个r-1相乘

这个时候你应该就能发现后面的规律了

至少o个盒子是空着的情况就是
方案数 = C r o ∗ ( r − o ) n 方案数 = C_r^o * (r - o)^n 方案数=Cro(ro)n
但是此时的你可能还不是很理解要干嘛

不是这样还是有很多重复的情况吗?

这里就涉及到了一个重要的组合数学原理,容斥原理

定义:若A和B是具有性质P1和性质P2的有限集合

那么 A ∪ B = A + B − A ∩ B A ∪ B = A + B - A ∩ B AB=A+BAB

同理可得 $A ∪ B ∪ C = A + B + C - A ∩ B - A ∩ C - B ∩ C + A ∩ B ∩ C $

通俗易懂的来说接下来的步骤就是用总情况, 减去 至少有一个的时候, 加上 至少有2个的时候 。。。。。。

再解释一下就是减去所有至少有一个的情况的时候,就多减去了很多至少有2个的时候,加上的时候又加上了很多至少有三个的情况,以此类推

那么剩下的就是组合数学的基础部分,快速幂就不展开了,组合数由于范围非常小,如果又不理解的朋友可以转去看我的这篇文章

(组合数的计算)牛客周赛 Round 35 小红的子序列权值和 (easy / hard)

总代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 15;
int n,r;
int C[N][N];
int init()
{
	for(int i=0;i<N;i++){
		for(int j=0;j<=i;j++){
			if(!j) C[j][i] = 1;
			else C[j][i] = C[j-1][i-1] + C[j][i-1];
		}
	}
}
int qmi(int a,int b)
{
	int res = 1;
	while (b){
		if(b & 1) res *= a;
		a *= a;
		b >>= 1;
	}
	return res;
}
signed main()
{
	init();
	cin >> n >> r;
	int o = qmi(r,n);
	for(int i=1;i<r;i++){
		if(i & 1){
			o -= C[i][r] * qmi(r-i,n);
		}else{
			o += C[i][r] * qmi(r-i,n);
		}
	}
	cout << o << endl;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/462007.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode代码记录(动态规划基础题(斐波那契数列)

目录 1. 题目&#xff1a;2. 斐波那契数列&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a…

【Spring Boot】创建你的第一个 Spring Boot 应用

创建你的第一个 Spring Boot 应用 1.环境配置2.步骤详解3.项目结构分析3.1 入口类 DemoApplication3.2 控制器 PathVariableController3.3 控制器 BasicController3.4 模型 User 4.运行 Spring Boot 目前已经成为了 Java 开发领域的框架范式。本篇博客&#xff0c;我将带领大家…

c语言:操作符详解(上)

目录 一、操作符的分类二、二进制和进制转换1.2进制转10进制2.10进制转2进制3.2进制转8进制4.2进制转16进制 三、原码、反码、补码四、算术操作符、-、*、/、%1.**和-**2.*3./4.% 五、移位操作符1.左移操作符2.右移操作符 六、位操作符&#xff1a;&、|、^、~七、赋值操作符…

【Linux进程状态】

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、直接谈论Linux的进程状态 看看Linux内核源代码怎么说 1.1、R状态 -----> 进程运行的状态 1.2、S状态 -----> 休眠状态(进程在等待“资源”就绪) 1.3、T状…

想兼职赚钱?盘点6个靠谱兼职,赚钱更轻松!

1&#xff0c;微头条搬砖 微头条搬砖是一个门槛不高的赚钱方式&#xff0c;而且不需要你有多么好的原创能力&#xff0c;去收集一些热门文章的素材进行文章伪原创&#xff0c;十分钟就能搞定&#xff0c;只要你的文章有爆点&#xff0c;足够吸人眼球&#xff0c;就能够获取不低…

liunx离线安装mysql

liunx离线安装mysql 一.安装二.添加系统mysql组和mysql用户三.创建并修改mysql数据目录四.修改目录权限五.初始化数据库如果报错关于libaio.so.1六.修改权限为root七.添加启动服务**八.** ***\*登录数据库\**** 博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&a…

OpenHarmony 鸿蒙操作系统初体验

一、测试环境 硬件&#xff1a;野火开发板 RK3568 &#xff0c;LubanCat2-N 系统&#xff1a;OpenHarmony_3.2.3 二、驱动安装 下载驱动 Rockchip_DriverAssitant_v5.1.1&#xff0c;并安装。 安装完成 三、镜像烧录 准备工作 注&#xff1a;仅支持烧录镜像到EMMC&…

Arthas使用案例(二)

说明&#xff1a;记录一次使用Arthas排查测试环境正在运行的项目BUG&#xff1b; 场景 有一个定时任务&#xff0c;该定时任务是定时去拉取某FTP服务器上的文件&#xff0c;进行备份、读取、解析等一系列操作。 而现在&#xff0c;因为开发环境是Windows&#xff0c; 线上项…

代码随想录 -- 回溯算法

文章目录 回溯算法理论什么是回溯法回溯法的效率回溯法解决的问题理解回溯法回溯法模板 组合问题I描述题解优化 组合总和III描述题解 电话号码的字母组合描述题解 组合总和描述题解 组合总和II描述题解 分割回文串描述题解 复原IP地址描述题解 子集描述题解 子集II描述题解 递增…

Linux 学习笔记(16)

十六、 计划任务 在很多时候为了自动化管理系统&#xff0c;我们都会用到计划任务&#xff0c;比如关机&#xff0c;管理&#xff0c;备份之类的操作&#xff0c;我 们都可以使用计划任务来完成&#xff0c;这样可以是管理员的工作量大大降低&#xff0c;而且可靠度更好。 l…

软件测试之学习测试用例的设计(等价类法、边界值法、错误猜测法、场景法、因果图法、正交法)

1. 测试用例的概念 软件测试人员向被测试系统提供的一组数据的集合&#xff0c;包括 测试环境、测试步骤、测试数据、预期结果 2. 为什么在测试前要设计测试用例 测试用例是执行测试的依据 在回归测试的时候可以进行复用 是自动化测试编写测试脚本的依据 衡量需求的覆盖率…

通过简单的案例入门Mybatis~

目录 一.概述 二.JDBC的缺点 三.案例 1.创建测试类 2.加载Mybatis核心配置文件获取SqlSessionFactory 3.获取SqlSession对象 4.执行sql 5.释放资源 一.概述 Mybatis是一款持久层框架&#xff0c;用于简化JDBC开发。所谓框架&#xff0c;就是一个半成品软件&#xff0c;…

2024年【P气瓶充装】考试资料及P气瓶充装考试总结

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年P气瓶充装考试资料为正在备考P气瓶充装操作证的学员准备的理论考试专题&#xff0c;每个月更新的P气瓶充装考试总结祝您顺利通过P气瓶充装考试。 1、【多选题】CNG双燃料汽车系统主要包括&#xff08;&#xff…

数据链路层_以太网

IP协议确定数据跨网络从主机A到主机B的路径&#xff0c;即IP协议解决了路径选择问题&#xff0c;但在这之前&#xff0c;必须先解决数据在一个子网内的传输的问题。跨网络的本质就是跨多个子网&#xff0c;只要一个子网内可以通信&#xff0c;那么便可以跨网络通信。 一.以太…

Echarts+Vue 首页大屏静态示例Demo 第四版 支持自适应

效果: 源码: <template><ScaleScreenclass="scale-wrap":selfAdaption="true":autoScale="true":class="{ fullscreen-container: isFullScreen }"><div class="bg"><dv-loading v-if="loading&…

Docker 中 MySQL 的部署与管理

目录 一、Docker 中部署 MySQL1.1 部署 MySQL1.2 进入容器并创建数据库1.3 Navicat 可视化工具连接 二、可能存在的问题2.1 1130 - Host ‘172.17.0.1‘ is not allowed to connect to this MySQL server 参考资料 一、Docker 中部署 MySQL 1.1 部署 MySQL 首先&#xff0c;从…

[题解]无厘头题目——无聊的军官

这道题非常无厘头&#xff01; 题目描述&#xff1a; 每个学年的开始&#xff0c;高一新生们都要进行传统的军训。今年有一个军训教官十分奇怪&#xff0c;他为了测试学员们的反应能力&#xff0c;每次吹哨后学员们都会变换位置。每次左数第I位学员都会站到第ai个位置&#x…

代码随想录训练营Day25:● 216.组合总和III ● 17.电话号码的字母组合

216.组合总和III 题目链接 https://leetcode.cn/problems/combination-sum-iii/description/ 题目描述 思路 自己写的效率会慢一些&#xff0c;而且没有用到剪枝 class Solution {List<List<Integer>> list new ArrayList<>();List<Integer> lis…

python知识点总结(一)

这里写目录标题 一、什么是WSGI,uwsgi,uWSGI1、WSGI2、uWSGI3、uwsgi 二、python中为什么没有函数重载&#xff1f;三、Python中如何跨模块共享全局变量?四、内存泄露是什么?如何避免?五、谈谈lambda函数作用?六、写一个函数实现字符串反转&#xff0c;尽可能写出你知道的所…

『scrapy爬虫』05. 使用管道将数据写入mysql(详细注释步骤)

目录 1. 新建管道类,并启用2. 准备好mysql数据库新建表3. 实现管道写入数据库的代码测试一下 总结 欢迎关注 『scrapy爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『scrapy爬虫』 专栏&#xff0c;持续更新中 如果对mysql和python不熟悉可看专栏【Python之pymysql库学习】 1.…
最新文章