首页 > 代码库 > poj 1664 放苹果 递归
poj 1664 放苹果 递归
题目链接:
http://poj.org/problem?id=1664
题目描述:
有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式?
解题思路:
当前有n个苹果,m个盒子。
(1):假设当前最少的盒子放置一个苹果,则给m个盒子分别放一个苹果,剩下n-m个苹果。
(2):假设当前最少的盒子不放苹果,则剩m-1个box,n个苹果。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <iostream> 5 using namespace std; 6 7 int f (int n, int m); 8 9 int main ()10 {11 int t, n, m;12 scanf ("%d", &t);13 while (t --)14 {15 scanf ("%d %d", &n, &m);16 printf ("%d\n", f(n, m));17 }18 return 0;19 }20 21 int f (int n, int m)22 {23 if (n < 0)//没有苹果了,违法24 return 0;25 if (n == 0 || m == 1)//一个盒子,无论有几个苹果,就只有一种放置方法,没有苹果一样;26 return 1;//若有一个苹果就需要讨论累加到哪一个剩余的盒子里,盒子没有顺序,但是盒子里苹果数目不同27 return f (n-m, m) + f (n, m-1);28 }
poj 1664 放苹果 递归
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。