题解 | #放苹果#
放苹果
https://www.nowcoder.com/practice/bfd8234bb5e84be0b493656e390bdebf
递归: 苹果数目m,盘子数目n,f (m,n)表示m个苹果,n个盘子有多少方法
(1)m < n,必有n-m个盘子空着,则至多使用m个盘子,有f (m,m)种方法;
(2)m > n时间
a、有至少一个盘子空着,即相当于f(m,n) = f(m,n-1);
b、所有盘子都有苹果,将m-n个苹果再随意分配n个盘中,即f(m,n) = f(m-n,n).
总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
b、所有盘子都有苹果,将m-n个苹果再随意分配n个盘中,即f(m,n) = f(m-n,n).
总的放苹果的放法数目等于两者的和,即 f(m,n) =f(m,n-1)+f(m-n,n)
using System; using System.Linq; namespace HJ61{ class Solution{ public static void Main(){ var input = Console.ReadLine(); var data = input.Split(' '); data = data.ToArray(); int appleNum = Convert.ToInt32(data[0]); int planeNum = Convert.ToInt32(data[1]); var res = count(appleNum, planeNum); Console.WriteLine(res); } public static int count(int m, int n){ if(m == 0 || n == 1) return 1; if(n > m) return count(m, m); else return count(m, n-1) + count(m-n,n); } } }