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

100127. 给小朋友们分糖果 II

给你两个正整数 n 和 limit 。

请你将 n 颗糖果分给 3 位小朋友,确保没有任何小朋友得到超过 limit 颗糖果,请你返回满足此条件下的 总方案数 。

示例 1:

输入:n = 5, limit = 2
输出:3
解释:总共有 3 种方法分配 5 颗糖果,且每位小朋友的糖果数不超过 2 :(1, 2, 2) ,(2, 1, 2) 和 (2, 2, 1) 。

示例 2:

输入:n = 3, limit = 3
输出:10
解释:总共有 10 种方法分配 3 颗糖果,且每位小朋友的糖果数不超过 3 :(0, 0, 3) ,(0, 1, 2) ,(0, 2, 1) ,(0, 3, 0) ,(1, 0, 2) ,(1, 1, 1) ,(1, 2, 0) ,(2, 0, 1) ,(2, 1, 0) 和 (3, 0, 0) 。

解析:

正难则反:我们先算出总方案数,在减去不合法的数即可。

有组合数学可以用隔板法进行求出总方案数。C(n+2,2)

在考虑不合法的数。

由容斥原理得:

考虑到三种情况:(这里要注意至少这个词语的理解)

1.当至少一个人不合法,那个人至少要limit+1个球,在用隔板法,在n-limit-1中经行分配 3*C(n- limit-1+2,2),由题意知道由三个人。

2.当至少有两个人不合法时,至少要消耗(limit+1)*2个球,分配的方案数为3⋅C(n−2⋅(limit+1)+2,2)

3.至少有三个人不合法时,分配的方案数为C(n−3⋅(limit+1)+2,2)

最后总方案数  - 不合法方案数即可。

在上面三种情况中有一些是重复被减去 所以后面要加上。

class Solution {
public:long long c2(long long n){return n > 1 ?n*(n-1)/2:0;}long long distributeCandies(int n, int limit) {return c2(n+2) - 3*c2(n-limit+1) + 3*c2(n-2 *limit) - c2(n-3*limit - 1);}
};

http://www.lryc.cn/news/227362.html

相关文章:

  • 【2】Spring Boot 3 项目搭建
  • 【第七章】软件设计师 之 程序设计语言与语言程序处理程序基础
  • 如何判断一个角是否大于180度(2)
  • ASAM OpenDRIVE V1.7协议超详解(一)
  • springboot的配置信息的设置和读取(application.properties/application.yml)
  • Deepsort项目详解
  • C语言证明一个偶数总能表示为两个素数之和。输入一个偶数并将其分解为两个素数
  • Python 的 datetime 模块
  • Termius for Mac:掌控您的云端世界,安全高效的SSH客户端
  • Ubuntu 下监控并自动重启网卡
  • 377. 组合总和 Ⅳ
  • 【OpenCV】计算视频的光流并跟踪物体calcOpticalFlowPyrLK
  • C语言进阶
  • Linux之gdb
  • 100天精通风控建模(原理+Python实现)——第3天:风控建模中如何处理缺失值?
  • Leetcode—680.验证回文串II【简单】
  • Redis五种数据类型及命令操作(二)
  • 低代码信创开发核心技术(三):MDA模型驱动架构及元数据系统设计
  • HslCommunication模拟西门子读写数据
  • 多测师肖sir_高级金牌讲师_ui自动化po框架版本02
  • 线性判别分析(Linear Discriminant Analysis,LDA)
  • git的分支及标签使用及情景演示
  • 深度解析找不到msvcp120.dll相关问题以及解决方法
  • SQL Server 2022 安装步骤——SQL Server设置身份验证教程
  • Maven各方面配置好了却无法显示版本
  • Jdk 1.8 for mac 详细安装教程(含版本切换)
  • 02MyBatisPlus条件构造器,自定义SQL,Service接口
  • c语言练习11周(6~10)
  • 钉钉API与集简云无代码开发连接:电商平台与营销系统的自动化集成
  • C++算法:包含三个字符串的最短字符串