题目描述

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

输入

每个用例包含二个整数M和N。0<=m<=10,1<=n<=10。<=n<=10<=m<=10

样例输入

7 3

样例输出

8

分析:

假设对于m个苹果,n个盘子共有apple(m,n)种方法,那么要想办法递归将m,n的值减小,首先设置递归条件,当m<=1或者n<=1时,apple(m,n)=1;

然后,根据m,n取值分两种情况讨论。

(1)如果m<n,那么肯定有m-n个盘子是空的,而空哪些盘子对结果是无影响的,这与m个苹果放m个盘子的放法数目一样,所以apple(m,n)=apple(m,m)。

(2)如果m>=n,那么再分两种情况讨论:1)所有盘子上面都有苹果,那么从每个盘子上都拿走一个苹果对结果没有影响,或者理解为放苹果的时候先在每个盘子上放一个苹果,然后再将m-n个苹果放在n个盘子中,每个盘子放一个苹果放法唯一,而且对后面的结果没有影响,这种情况apple(m,n)=apple(m-n,m)

2)不是所有盘子都有苹果,换句话说就是至少有一个盘子是空的,而空哪个盘子是对结果没有影响的,apple(m,n)=apple(m,n-1),这种情况即使有n个盘子是空的也可以找n次apple(m,n)=apple(m,n-1),只不过只有至少有一个盘子是空的是完全成立的。

上面已经把所有情况都讨论完了,就可以写程序了。

#include<iostream>
using namespace std;
int apple(int m,int n)
{
if(m<= || n<=)
{
return ;
}
if(m<n)
{
return apple(m,m);
}
else
{
return apple(m,n-)+apple(m-n,n);
}
}
int main()
{
int n,m;
cin>>m>>n;
cout<<apple(m,n);
return ;
}

oj放苹果的更多相关文章

  1. openjudge666:放苹果—题解

    (测试这里的markdown,同时也有纪念意义吧--第一次写的题解) 当时刚学递推的时候做的一道题 oj上的666题 666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M ...

  2. OpenJudge 666:放苹果 // 瞎基本DP

    666:放苹果 总时间限制:  1000ms     内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1 ...

  3. POJ 1664 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24985   Accepted: 15908 Description ...

  4. POJ --- 1164 放苹果

    放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24947   Accepted: 15887 Description ...

  5. POJ——放苹果

    4:放苹果 查看 提交 统计 提问 总时间限制:  1000ms  内存限制:  65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示) ...

  6. poj1664放苹果(递归)

    题目链接:http://poj.org/problem?id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: ...

  7. 放苹果(poj1664递归)

    ti放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24392   Accepted: 15513 Descripti ...

  8. poj 1664 放苹果(递推)

    题目链接:http://poj.org/problem? id=1664 放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions ...

  9. poj1664 放苹果(DPorDFS)&&系列突破(整数划分)

    poj1664放苹果 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33661   Accepted: 20824 Desc ...

随机推荐

  1. Java 线程池框架核心代码分析

    前言 多线程编程中,为每个任务分配一个线程是不现实的,线程创建的开销和资源消耗都是很高的.线程池应运而生,成为我们管理线程的利器.Java 通过Executor接口,提供了一种标准的方法将任务的提交过 ...

  2. How to: Add Missing ContentPlaceHolder

    In Microsoft SharePoint Server 2010, the BlueBand master page is not supported in the Search Center ...

  3. 回溯(su)算法之N皇后问题

    这里回溯算法还要好好研究一下 试探一个位置是否有效,如果有效,试探下一个位置(DFS),如果无效则回退 1.定义一个解空间,存放一个解的空间 2.DFS(暂且认为是DFS) 这里N皇后用的是递归+回溯 ...

  4. 1257: [CQOI2007]余数之和sum - BZOJ

    Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, ...

  5. 1068: [SCOI2007]压缩 - BZOJ

    Description 给一个由小写字母组成的字符串,我们可以用一种简单的方法来压缩其中的重复信息.压缩后的字符串除了小写字母外还可以(但不必)包含大写字母R与M,其中M标记重复串的开始,R重复从上一 ...

  6. Smarty插件简单开发

    smarty的插件相当简单,你的网站经常会用到一些特定的Url或Controller或Action的路由地址的动态生成,通过smarty插件方式可以很轻松的实现. 在smarty/plugins目录下 ...

  7. 修改tomcat 启动45秒

    当我们需要增加Tomcat的启动时间,修改方法如下:

  8. 把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

    // ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> ...

  9. IE6兼容inline-block的方法

    或许有朋友会对IE不支持 display:inline-block 属性,表示疑问或者反对.说:“我在 IE 中对 a 或者 span 等内联元素使用 display:inline-block 一直是 ...

  10. 【BZOJ】【2253】【WC 2010 BeijingWC】纸箱堆叠

    树套树 Orz zyf 我的树套树不知道为啥一直WA……只好copy了zyf的写法TAT 这题还可以用CDQ分治来做……但是蒟蒻不会…… //y坐标的树状数组是按权值建的……所以需要离散化…… /** ...