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

有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案?

分配方案

描述
有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案?
输入
一行,两个整数,分别是人数n与钱数m,用一个空格隔开。

输出
一行,一个整数,是分配方案数。

样例输入

5 10

样例输出

126

问题分析

1. 初始状态:

如果没有人(即i=0),那么没有方案,方案数为0。

如果没有钱(即j=0),那么唯一的方案就是所有人都分到 0 元钱,但这种情况不符合每个人至少1 元钱的条件,方案数为0。

如下表所示:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/a849f408b2be44458137526004c811c4.png

2. 状态转移方程 :

如i=3,j=5,代表我们将5元钱分给3个人,方案数用f(i,j)表示,所有方案如下:

最后一人分1元,其余两人分剩余的4元,方案数为f(i-1, j-1);

最后一人分2元,其余两人分剩余的3元,方案数为f(i-1, j-2);

最后一人分3元,其余两人分剩余的2元,方案数为f(i-1, j-3);

最后一人分4元,其余两人分剩余的1元。不符合要求,方案数为0;

最后一人分5元,其余两人分剩余的0元。不符合要求,方案数为0。

综上所述,方案数计算如下:

f(i,j) = f(i-1,j-1) + f(i-1, j - 2) + … + f(i -1, i-1)
在这里插入图片描述
因为 f(i-1, j - 2) + … + f(i -1, i-1) = f(i, j-1)
在这里插入图片描述
所以状态转移方程为:f(i,j) = f(i-1,j-1) + f(i, j-1)

3. 边界条件:

我们定义一个二维列表dp ,其中dp[i][j]表示将j元钱分配给i个人的方案数。

dp[1][1]=1表示1个人,1元钱,只有一种方案。

m<n时,钱数少于人数,方案数为0。

4. 参考代码

参考代码【递归】

def f(n, m):if m < n:return 0if n == 1:return 1count = 0for i in range(1, m - n + 2):# 递归计算 f(i-1,j-1) **+ f(i-1, j - 2) + ... + f(i -1, i-1)#  i的值最大为m-n+1count += f(n - 1, m - i)# 从f(n-1, m-1) 到 f(n-1, m-(m-n+1))即f(n-1,n-1)累加求和return countn, m =map(int,input().split())
print(f(n, m))

参考代码【动态规划】

n, m = map(int,input().split())
dp =[[0]*(m+1) for i in range(n+1)]
for j in range(1, m+1):dp[1][j]=1  # 大于等于1元时,只有1人分配方案有1种
for i in range(2, n+1):for j in range(i, m+1):# 从i开始,j小于i不需要计算dp[i][j]= dp[i-1][j-1] + dp[i][j-1]
print(dp[n][m])

递归和动态规划是解决很多算法问题的两种重要方法,尤其在处理需要重复子问题求解的问题时非常有效。尽管它们在某些方面相似,但在效率、内存使用以及实现方式上有着显著的区别。

↓ 更多少儿编程知识点 击 gzh 名 片 关 注查看 ↓

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

相关文章:

  • 光耦——创新引擎 助推中国经济高质量发展
  • Go 中 RPC 的使用教程
  • 挖耳勺可以伸进耳朵多深?安全可视挖耳勺推荐!
  • SuperMap GIS基础产品FAQ集锦(20240911)
  • 从状态管理到性能优化:全面解析 Android Compose
  • ChatGPT提示词优化大师使用指南
  • 计算机毕业设计 智能推荐旅游平台 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试
  • 【拥抱AI】基于多种数据分段工具的优缺点分析
  • 在 Windows 系统上,文件传输到虚拟机(VM)可以通过 VS Code 的图形界面(GUI)或命令行工具进行操作
  • kafka的主要功能
  • vue3中provide和inject详解
  • 相约华中科技大学,移动云技术论坛来了!NineData创始人CEO叶正盛将分享《数据库全球实时传输技术实践》的主题演讲
  • 华为 昇腾 310P 系列 AI 处理器支持 140Tops 的 AI 算力。
  • 基于单片机的小型生态鱼缸控制器设计
  • git-repo使用
  • 如何设计实现完成一个FPGA项目
  • Oracle(106)如何实现透明数据加密?
  • 用Python实现时间序列模型实战——Day 18: 时间序列中的季节性与周期性预测
  • JavaScript ES6特性(var let const、function=>、增强表达赋值、类与对象)
  • Paddle安装详解(CPU版本)
  • PHP即刻送达同城派送小程序系统
  • RabbitMQ的Direct Exchange模式实现的消息发布案例
  • 数据结构-二叉树-基础知识
  • wangeditor——cdn引入的形式创建一个简易版编辑器——js技能提升
  • 9.11.
  • 【GeekBand】C++设计模式笔记1_介绍
  • MySQL 数据库:原理、应用与发展
  • 7.2图像旋转
  • 学学vue-2
  • 什么是 Grafana?