分治法求解放苹果问题(量子力学的状态问题,完全相同的苹果和完全相同的盘子)

本文介绍了一种将M个苹果分配到N个盘子中的算法实现,并提供了具体的Java代码示例。通过递归方法计算不同分法的数量,适用于苹果数量不超过10的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)51115是同一种分法。

 

输入

每个用例包含二个整数MN0<=m<=10,1<=n<=10。<=n<=10<=m<=10

 

样例输入

7 3

 

样例输出

8

    

/**

     * 计算放苹果方法数目

     * 输入值非法时返回-1

     * 1 <= m,n <= 10<><= m,n <= 10<>

     * @param m 苹果数目

     * @param n 盘子数目数

     * @return 放置方法总数

     * 

     */

    public static int count(int m, int n)

 

 

 

 

 

 

public final class Demo
{
    /**
     * 计算放苹果方法数目<br>
     * 输入值非法时返回-1
     * @param m 苹果数目, 0 <= m <=10
     * @param n 盘子数目数,1 <= n <=10
     * @return int 放置方法总数
     *
     */
 /*
  *
  * 分析:假设:放法是:f(m,n).如果盘子比苹果多,那么一定有n-m个盘子是空的,
这个时候,相当于在m个数目的盘子里面放m个苹果。即f(m,n)=f(m,m)
如果盘子数目比苹果的数目少的时候,有两种情况
第一:至少有一个盘子是空的,那么这个时候,放法就和m个苹果放到n-1个盘子里面的放法相同。即f(m,n)=f(m,n-1)
第二:每个盘子都都是有苹果的,那么就相当于把m-n个苹果放到n个盘子里面的的放法是一样的。即f(m,n)=f(m-n,n)
则在盘子比苹果少的时候,就是上面的两种情况的之和。

  * */
    public static int count(int m, int n)// pingguo + panzi
    {
     if(m<0||m>10||n<1||n>10) return -1;
     if(m==0||n==1||m==1) return 1;
      if(m>n) // apple is more
      {
       return (count(m,n-1)+count(m-n,n));
       
      }
      else  //plate more
      {
       return count(m,m-1)+1;
      }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值