openjudge-1664 放苹果
总时间限制:
1000ms
内存限制:
65536kB
描述
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
输入
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
输出
对输入的每组数据M和N,用一行输出相应的K。
样例输入
1
7 3
样例输出
8
这个题目采用递归解决,我们首先对于问题分析一下,如果盘子的数目大于苹果的数目,那肯定要有一些盘子是什么也不放的。
所以还剩下 n-m 个盘子,其余的盘子都是一样的,所以不做处理。
然后对问题进行分类,要么就有盘子不放苹果,要么就在每个盘子上面全放上苹果。
对于这两种情况:不放苹果的话就 return f(m,n-1),然后这个递归就会从盘子数目从1到n-1递归求解有多少种 方案数。
这个过程实际上是先求当前的 有的不放 + 所有都放 的情况,然后要求这个就要先求之前的 有的不放 + 所有都放 的数目,直到回到递归的边界条件得到一个确定的值,这时候边界的值就知道了,是一个确定的数,那上一层的递归就也可以通过一个确定的数相加得到确定的值,假设上一层是有两个递归的的,,一个 有的不放 ,一个 所有都放 。所以最底层的边界就要有四个值,每个递归两个。其实这样的话,这一层就已经相当于是最顶层了,这就是要求的结果了,因为,每次递归下去都是二层递归, 所以当递归数目为2的时候,就是最顶层了。
至于所有都放,自己体会一下。
说完了问题的分类,就该说递归的终止了,因为题目允许盘子不放入苹果,所以,当苹果数目为零,但是盘子数目不为零的时候,他的方案数就为 1 。
但是当盘子的数目为零的时候,就没有方案数了,就是零。
注意递归的求解就是一定要有边界条件。
#include <iostream>
using namespace std;
int f(int m,int n)
{
if (n>m)
return f(m,m);
if (m==0)
return 1;
if (n==0)
return 0;
return f(m,n-1)+f(m-n,n);
}
int main()
{
int t;
int m,n;
cin>>t;
while (t--) {
cin>>m>>n;
cout<<f(m,n)<<endl;
}
return 0;
}
openjudge-1664 放苹果的更多相关文章
- poj 1664 放苹果(递推)
题目链接:http://poj.org/problem? id=1664 放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions ...
- openjudge(POJ)-1664 放苹果
对于n个盘子,m个苹果,我们要么在每个盘子上都放苹果,要么至少有一个盘子不放. 一个盘子不放就是f(m,n-1),全部都放的时候苹果就变成了n-m个,但是盘子的数目是不变的,因为此时还没有产生方案数, ...
- poj 1664 放苹果 递归
题目链接: http://poj.org/problem?id=1664 题目描述: 有n个苹果,m个盒子,盒子和苹果都没有顺序,盒子可以为空,问:有多少种放置方式? 解题思路: 当前有n个苹果,m个 ...
- POJ 1664 放苹果 (递推思想)
原题链接:http://poj.org/problem?id=1664 思路:苹果m个,盘子n个.假设 f ( m , n ) 代表 m 个苹果,n个盘子有 f ( m , n ) 种放法. 根据 n ...
- OpenJudge 666:放苹果 // 瞎基本DP
666:放苹果 总时间限制: 1000ms 内存限制: 65536kB 描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1 ...
- POJ 1664 放苹果
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 24985 Accepted: 15908 Description ...
- poj 1664放苹果(递归)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 37377 Accepted: 23016 Description ...
- poj 1664 放苹果 (划分数)
题意:中文题目,不解释... 题解: 第一种方法是暴力深搜:枚举盘子1~n放苹果数量的所有情况,不需要剪枝:将每次枚举的情况,即每个盘的苹果数量,以字典序排序,然后存进set里 以此去重像" ...
- poj 1664 放苹果(dfs)
放苹果 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 30284 Accepted: 19098 Description ...
- OpenJudge/Poj 1664 放苹果
1.链接地址: http://bailian.openjudge.cn/practice/1664 http://poj.org/problem?id=1664 2.题目: 总时间限制: 1000ms ...
随机推荐
- 算法学习--Day2
今天要多学一些内容了,昨天就写了一点sort和struct的用法,今天写了两道关于日期的题目,记录在这里. 题目描述 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 ...
- hdoj2795【未完待续】
题意: 给你一个矩形h*w(h,w都是1e9),然后给你n个询问,每个询问带一个1*wi矩形,问你这个给定矩形能放在第几行(从1-h下来).如果最终放不下了,就输出-1. 比如案例: 3 5 5 2 ...
- python __builtins__ int类 (36)
36.'int', 用于将一个字符串或数字转换为整型 class int(object) | int(x=0) -> integer | int(x, base=10) -> intege ...
- Spring 中的 18 个注解,你会几个?
阅读本文大概需要 4 分钟. 作者:Java的小本家 @Controller 标识一个该类是 Spring MVC controller 处理器,用来创建处理 http 请求的对象. @RestCon ...
- oatu2.0认证原理(转)
今天有时间总结一下: 一.OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版. 在详细讲解OAuth 2.0之前,需要了解几个专用名词,理 ...
- [LuoGu]P2664 树上游戏
Portal 这题真的好. 看到树上路径, 脑子里就要点分治 这一题对于每个点都要计算一遍, 如果暴算实在不好算, 这样我们就可以考虑算贡献. 直接计算每种颜色的贡献. 因为一条过重心的路径中, 可能 ...
- Educational Codeforces Round 18 A
Description There are n cities situated along the main road of Berland. Cities are represented by th ...
- 位运算 UEST 84 Binary Operations
题目传送门 题意:所有连续的子序列的三种位运算计算后的值的和的期望分别是多少 分析:因为所有连续子序列的组数有n * (n + 1) / 2种,所以要将他们分类降低复杂度,以ai为结尾的分成一组,至于 ...
- Android APK加壳技术方案
Android APK加壳技术方案[1] Android APK加壳技术方案[2]
- CSS实现文字旋转/实现角标
主要用到属性transform:rotate(-30deg) example: .divedittable .project-tag div { width: 43px; line-height: 4 ...