首页 > 移动平台 > 详细

poj 1664 放苹果 递归

时间:2014-12-18 21:51:52      阅读:275      评论:0      收藏:0      [点我收藏+]

题目链接:

  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 放苹果 递归

原文:http://www.cnblogs.com/alihenaixiao/p/4172672.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!