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

题解:洛谷 P1287 盒子与球

【题目来源】

洛谷:P1287 盒子与球 - 洛谷

【题目描述】

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

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

【输入】

输入只有一行两个整数,分别代表 \(n\)\(r\)

【输出】

输出一行一个整数代表答案。

【输入样例】

3 2

【输出样例】

6

【算法标签】

《洛谷 P1287 盒子与球》 #搜索# #枚举# #容斥原理# #Stirling数#

【代码详解】

#include <bits/stdc++.h>
using namespace std;int n, r, f[50][50], ans;  // n: 元素总数,r: 集合/盒子数量,f: DP数组,ans: 最终结果int main()
{// 读入n和rcin >> n >> r;// 初始化动态规划数组f[0][0] = 1;  // 将0个元素分成0个集合的方案数为1(空划分)// 动态规划计算第二类斯特林数S(n, r)for (int i = 1; i <= n; i++)  // 遍历元素个数i从1到n{for (int j = 1; j <= r; j++)  // 遍历集合个数j从1到r{// 递推公式:S(i, j) = S(i-1, j-1) + j * S(i-1, j)// 含义:// 1. S(i-1, j-1):第i个元素单独成一个新集合// 2. j * S(i-1, j):第i个元素放入已有的j个集合中的任意一个,有j种选择f[i][j] = f[i - 1][j - 1] + j * f[i - 1][j];}}// 获取第二类斯特林数S(n, r)ans = f[n][r];// 乘以r!,将无序集合转换为有序盒子// 因为S(n, r)计算的是无序集合的划分// 乘以r!后得到将n个不同元素放入r个不同盒子的方案数for (int i = 1; i <= r; i++){ans *= i;  // 计算r的阶乘}// 输出最终结果printf("%d", ans);return 0;
}

【运行结果】

3 2
6
http://www.jsqmd.com/news/397161/

相关文章:

  • 题解:洛谷 P3197 [HNOI2008] 越狱
  • LeetCode761:特殊的二进制字符串
  • 题解:洛谷 P4549 【模板】裴蜀定理
  • 从传统编程到AI协同开发的职业转型
  • 数据仓库入门指南:从零开始构建大数据存储系统
  • API网关设计:管理AI API生命周期的实战技巧!
  • r1打卡
  • AI应用架构师从0到1:AI虚拟培训系统的需求分析与原型设计
  • flex与bison学习之安装环境cygwin
  • 题解:洛谷 P1082 [NOIP 2012 提高组] 同余方程
  • 探秘提示工程架构师如何用提示工程优化环节
  • 题解:洛谷 P2303 [SDOI2012] Longge 的问题
  • 题解:洛谷 P5091 【模板】扩展欧拉定理
  • 题解:洛谷 P2568 GCD
  • 模拟退火算法
  • 题解:洛谷 P3861 拆分
  • GESP2024年3月认证C++二级( 第三部分编程题(1) 乘法问题)
  • Java synchronized关键字详解:从入门到原理
  • 题解:洛谷 P1495 【模板】中国剩余定理(CRT)/ 曹冲养猪
  • CSP-J2025游记
  • 题解:洛谷 P4942 小凯的数字
  • P3143 [USACO16OPEN] Diamond Collector S
  • 蛇和锯子的羁绊
  • 题解:洛谷 P2704 [NOI2001] 炮兵阵地
  • 北京字画回收|上门服务,当场现金结算,丰宝斋让你变现无忧 - 品牌排行榜单
  • 题解:洛谷 P1879 [USACO06NOV] Corn Fields G
  • Lambda架构在智能家居大数据处理中的实践
  • 题解:洛谷 P2831 [NOIP 2016 提高组] 愤怒的小鸟
  • 题解:洛谷 P1450 [HAOI2008] 硬币购物
  • 提示工程架构师晋升难?因为你没搞懂这套「成长地图」