博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
m个苹果放入n个盘子问题
阅读量:5975 次
发布时间:2019-06-20

本文共 1364 字,大约阅读时间需要 4 分钟。

  这个问题,看似是一个简单的排列组合问题,但是加上不同的限制条件,会演变成不同的问题,感觉很奇妙,就总结一下列举下来

问题一

  问题描述:把m个同样的放在n个同样的盘子里,允许有的盘子空着不放,问有多少种不同的分法?(注:5,1,1和1,1,5是同一种分法)

解题分析:

  设f(m,n)为m个苹果,n个盘子的放法数目,则先对n作讨论,

  • 当n>m:则必定有n-m个盘子永远空着,去掉它们对摆放苹果方法数目不产生影响。即 if(n>m) f(m,n) = f(m,m)
  • 当n <= m:不同的放法可以分成两类:含有0的方案数,不含有0的方案数
  1. 含有0的方案数,即有至少一个盘子空着,即相当于 f(m,n)=f(m,n-1);
  2. 不含有0的方案数,即所有的盘子都有苹果,相当于可以从每个盘子中拿掉一个苹果,不影响不同放法的数目,即 f(m,n)=f(m-n,n).而总的放苹果的放法数目等于两者的和,即 f(m,n)=f(m,n-1)+f(m-n,n)

递归出口条件说明:

  • 当n=1时,所有苹果都必须放在一个盘子里,所以返回1;
  • 当m==0(没有苹果可放)时,定义为1种放法;

用递归解法

 

int fun(int m, int n) {//m个苹果放在n个盘子中共有几种方法    if(m==0 || n==1)        return 1;    if(n>m)        return fun(m,m);    else        return fun(m,n-1)+fun(m-n,n);}

 

 用动态规划解法:

int[][] mat=new int[m+1][n+1];			for(int i = 0; i <=m; i++) {				mat[i][0]=0;				mat[i][1]=1;			}			for(int i = 0; i <=n; i++) {				mat[0][i]=1;			}			for (int i = 1; i <=m; i++) {				for(int j = 1; j <=n; j++) {					if(i

问题二

  问题描述:将整数N分成K个整数的和且每个数大于等于A小于等于B,求有多少种分法

 
int Dynamics(int n, int k, int min){ //将n分为k个整数,最小的大于等于min,最大的不超过B    if(n < min) return 0;  //当剩下的比min小,则不符合要求,返回0    if(k == 1) return 1;    int sum = 0;    for(int t = min; t <= B; t++)    {        sum += Dynamics(n-t, k-1, t);    }    return sum;}

问题三

  m---->相同, n---->相同, 不能为空。将m个苹果放进n个盘子中,有多少种方法。同时注意例如1、2和2、1这两种方案是一种方案。

  思路,先把每个盘子都放一个苹果,这样问题就转化为:m-n个苹果放进n个盘子里,盘子允许空,即问题1

转载于:https://www.cnblogs.com/wxgblogs/p/5742618.html

你可能感兴趣的文章
GTK 安装步骤
查看>>
js 生成随机13位国际条码 支持获取校验位
查看>>
java根据开始时间和结束时间,计算中间天数,并打印
查看>>
Android apk的安装、卸载、更新升级(通过Eclipse实现静默安装)
查看>>
android幻灯片效果实现-Gallery
查看>>
node中exports与module.exports的区别
查看>>
PHP学习笔记2:文件
查看>>
jsrender简单使用
查看>>
window mysql-bin 转化为可读模式
查看>>
redis 安装及php扩展编译安装
查看>>
MPAndroidChart---饼状图PieChart
查看>>
PHP中基于b2core框架内部的网页上Html输出生成Word的处理
查看>>
采用Servlet Listener方式运行Liquibase
查看>>
TCP-IP 学习(三) TCP
查看>>
对比两个无序整形数组相似度问题算法
查看>>
批量有效地修改package名
查看>>
android或ios app请求参数格式
查看>>
Camera Vision - video surveillance on C#
查看>>
如何理解网络连接中的"3次握手"?
查看>>
使用Dubbo服务出现java.io.IOException: invalid constant type: 18异常解决办法
查看>>