您的位置:首页 > 其它

poj 1664 放苹果 递归

2014-12-18 20:55 218 查看
题目链接:

  http://poj.org/problem?id=1664

题目描述:

  有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式?

解题思路:

  当前有n个苹果,m个盒子。

  (1):假设当前最少的盒子放置一个苹果,则给m个盒子分别放一个苹果,剩下n-m个苹果。

  (2):假设当前最少的盒子不放苹果,则剩m-1个box,n个苹果。

代码:

  

#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
using namespace std;

int f (int n, int m);

int main ()
{
int t, n, m;
scanf ("%d", &t);
while (t --)
{
scanf ("%d %d", &n, &m);
printf ("%d\n", f(n, m));
}
return 0;
}

int f (int n, int m)
{
if (n < 0)//没有苹果了,违法
return 0;
if (n == 0 || m == 1)//一个盒子,无论有几个苹果,就只有一种放置方法,没有苹果一样;
return 1;//若有一个苹果就需要讨论累加到哪一个剩余的盒子里,盒子没有顺序,但是盒子里苹果数目不同
return f (n-m, m) + f (n, m-1);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: