洛谷P1287 盒子与球

题干:

现有 r 个互不相同的盒子和 n 个互不相同的球,要将这 n 个球放入 r 个盒子中,且不允许有空盒子。请求出有多少种不同的放法。

两种放法不同当且仅当存在一个球使得该球在两种放法中放入了不同的盒子。

数据范围:

0<=n,r<=10

思路很简单:还是补集的思想,假设A为所有不合法的放法,U为所有的放法,

答案就是 U-A

那么所有的放法 怎么求呢?

每一个球可以放的盒子有r种选择,有n个小球,所以总方案数就是:r^n种

那么A怎么求呢?

由于每个盒子都不空的方法是合法操作,那么有盒子空的方法就是不合法操作,

又可以分为,指定某1个盒子必然空其余盒子随意,指定某2个盒子空…………

指定某r-1个盒子是空的,其余盒子随意

(有些人看到这里可能会问,为啥要这样设啊,不能直接1个盒子空,2个盒子空……

这样吗,事实上是因为这样更难算,所以没有这样设,如果你直接算出来了一个盒子空有多少种,俩盒子空有多少种……那直接相减就行了,还用个毛容斥原理

指定某个盒子必然为空,更好算,因为其余的盒子只要随机放就可以了。)

当指定1个盒子是空的 的放法设为A1 ,首先从r个盒子里挑1个为空盒子,有C(r,1)=r种情况,

然后将所有球放入 r-1个盒子中,随意放置  有   (r-1)^n

所以当指定1个盒子是空的放法:C(r,1)*(r-1)^n

当指定k个盒子是空的放法:C(r,k)*  (r-k)^ n

由容斥原理,我们要求所有的方法的并集(因为这些方法直接是有相交的部分的)

总不和法的方法就是:\sum_{k=1}^{r-1}(-1)^{k+1}C_{r}^{k}*(r-k)^{n}

由于我们需要算合法的方法,所以真正的答案就是:

r^n-\sum_{k=1}^{r-1}(-1)^{k+1}C_{r}^{k}*(r-k)^{n}

整合起来:

\sum_{k=0}^{r-1}(-1)^{k}C_{r}^{k}*(r-k)^{n}

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<cctype>
#include<map>
#include<set>
#include<queue>
#include<numeric>
#include<iomanip>
using namespace std;
long long pw(int a, int b) {long long s = 1;while (b) {if (b & 1)s = s * a;a = a * a;b >>= 1;}return s;
}
long long C(int r, int k) {if (r < k)return 0;long long s = 1;for (int i = r; i > r - k; i--) {s *= i;s /= (r - i + 1);}return s;
}
int main() {int n, r;cin >> n >> r;long long ans = 0;for (int k = 0; k <= r - 1; k++) {ans += ((k & 1 ? -1 : 1) * C(r, k) * pw(r - k, n));}cout << ans;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

堆的相关时间复杂度计算(C语言)

目录 前言 建堆的时间复杂度 向上调整建堆的时间复杂度 向下调整建堆的时间复杂度 维护堆的时间复杂度 top K问题的时间复杂度 前言 在前面的三篇文章中我们成功的实现了堆排序的升降序以及基于堆的top K问题&#xff0c;现在我们来解决它们的时间复杂度问题 建堆的时间…

我有才专属定制适合个人的知识付费平台,打造个性化品牌与自主管理体验

在当今数字化时代&#xff0c;知识付费平台已经成为人们获取专业知识、提升自身素质的重要渠道。然而&#xff0c;公共知识付费平台虽然内容丰富&#xff0c;但难以满足个人或企业个性化的需求和品牌打造。因此&#xff0c;我们提出了专属定制适合个人的知识付费平台的概念&…

108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 高度平衡 二叉搜索树。 高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输…

2023年最新prometheus + grafana搭建和使用

一、安装prometheus 1.1 安装 prometheus官网下载地址 sudo -i mkdir -p /opt/prometheus #移动解压后的文件名到/opt/,并改名prometheus mv prometheus-2.45 /opt/prometheus/ #创建一个专门的prometheus用户&#xff1a; -M 不创建家目录&#xff0c; -s 不让登录 useradd…

面向AOP(2)spring

我是南城余&#xff01;阿里云开发者平台专家博士证书获得者&#xff01; 欢迎关注我的博客&#xff01;一同成长&#xff01; 一名从事运维开发的worker&#xff0c;记录分享学习。 专注于AI&#xff0c;运维开发&#xff0c;windows Linux 系统领域的分享&#xff01; 本…

ChatGPT是科学还是艺术?

OpenAI最近谈到GPT4变懒的问题&#xff0c;说“它更像是多人共同参与的艺术创作”&#xff0c;那到底大模型是科学还是艺术&#xff1f;

Spring Boot 3 集成 MyBatis详解

MyBatis是一款开源的持久层框架&#xff0c;它极大地简化了与数据库的交互流程。与类似Hibernate的ORM框架不同&#xff0c;MyBatis更具灵活性&#xff0c;允许开发者直接使用SQL语句与数据库进行交互。Spring Boot和MyBatis分别是两个功能强大的框架&#xff0c;它们的协同使用…

HarmonyOS4.0从零开始的开发教程10Video组件的使用

HarmonyOS&#xff08;九&#xff09;Video组件的使用 概述 在手机、平板或是智慧屏这些终端设备上&#xff0c;媒体功能可以算作是我们最常用的场景之一。无论是实现音频的播放、录制、采集&#xff0c;还是视频的播放、切换、循环&#xff0c;亦或是相机的预览、拍照等功能…

向日葵远程控制鼠标异常的问题

​ 在通过向日葵进行远程控制的时候&#xff0c;可能会遇到鼠标位置异常的问题。此时&#xff0c;不管怎么移动鼠标&#xff0c;都会停留在屏幕最上方&#xff0c;而无法点击到正确的位置。如图&#xff1a; 此时&#xff0c;如果启用了“被控端鼠标”功能&#xff0c;可以正…

dToF直方图之美_deadtime死区时间

上节在激光雷达多目标测距中有个问题为什么激光雷达不用做pile up算法,有人会有疑问,我看过很多人的简历,都把pile up量产校正算法写为最为自豪重要的算法攻坚,可能会吸引一波人的眼球。这要是在两三年前是值得被肯定的,但是如今随着dToF非常多量产项目落地,pile up研究不…

【Bootloader学习理解----跳转优化异常】

笔者接着来介绍一下Bootloader的跳转代码以及优化 1、跳转代码理解 跳转代码可能要涉及到芯片架构的知识,要跳转到对应的位置&#xff0c;还要设置相关的SP 堆栈指针&#xff0c;具体可以参考笔者这篇文章BootLoader的理解与实现。 STM32的跳转代码如下所示&#xff1a; u32 …

MATLAB - 评估拟合优度、评价拟合效果

系列文章目录 文章目录 系列文章目录前言一、如何评估拟合优度二、拟合优度统计2.1 SSE - 误差引起的平方和2.2 R 平方2.3 自由度调整 R 平方2.4 均方根误差 三、MATLAB - 评估曲线拟合度3.1 加载数据并拟合多项式曲线3.2 绘制拟合方程、数据、残差和预测范围图3.3 评估指定点3…